From 069e7edace210f864183a32e40a3713c7710fb7b Mon Sep 17 00:00:00 2001 From: oysta_admin Date: Fri, 11 Apr 2025 16:13:59 +0000 Subject: [PATCH] (Update) (Access TEC Roam) Change Eview for Roam in HTB --- access-tec-roam | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/access-tec-roam b/access-tec-roam index 2ac6445..7510286 100644 --- a/access-tec-roam +++ b/access-tec-roam @@ -1 +1 @@ -{"Id":224,"Name":null,"Description":null,"FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","InProgress":false,"MessageTypes":[{"Id":7358,"Code":"ACK-SPEED","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-SPEED;<>;","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":"^Roam;ACK-SPEED;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":7357,"Code":"ACK-WIFI","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-WIFI;<>;","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":"^Roam;ACK-WIFI;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6945,"Code":"ACK-VOL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-VOL;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5014,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar value = '34'; //10 Ring tone Volume\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":24},"CacheImei":false,"RegEx":"^Roam;ACK-VOL;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6940,"Code":"ACK-FALLALERT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-FALLALERT;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5007,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getFallDownAlert","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '56'; //Fall down Alert code\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":8},"CacheImei":false,"RegEx":"^Roam;ACK-FALLALERT;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6939,"Code":"ACK-NOMOTION","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-NOMOTION;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5008,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getNoMotionAlert","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '53'; //No motion Alert code\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":7},"CacheImei":false,"RegEx":"^Roam;ACK-NOMOTION;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6938,"Code":"ACK-CUSTID","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-CUSTID;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5010,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCustomId","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '47'; //Get device or custom id \r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":8},"CacheImei":false,"RegEx":"^Roam;ACK-CUSTID;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6937,"Code":"ACK-MODE","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-MODE;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5005,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getPerformanceMode","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '44'; //time interval\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\n/* IMEI:863921033969786\r\nGSM signal quality: 15\r\nSoftware version: V07BX.8601.2109\r\nversion: V1.0.29.1 */\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":7,"Order":23},"CacheImei":false,"RegEx":"^Roam;ACK-MODE;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6936,"Code":"ACK-LANG","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-LANG;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5004,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getSystemLanguage","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '1F'; //System language - locale\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data); // For GPRS command\r\nAddValue('sequenceNumber', sequenceID);\r\n//AddValueSMS('dataSMS', dataSMS); // For SMS command\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":3,"Order":22},"CacheImei":false,"RegEx":"^Roam;ACK-LANG;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6880,"Code":"ALSP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALSP;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALSP;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6888,"Code":"ALA-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ALA-S;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-ALA-S;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6929,"Code":"ACK-FIRM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-FIRM;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4957,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getFirmwareVersion","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar value = '1A'; //Ask for firmware Long\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'V?';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":16},"CacheImei":false,"RegEx":"^Roam;ACK-FIRM;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6912,"Code":"STP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>","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":"^Roam-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6885,"Code":"Alert Finalized","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-SOSEnding;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-SOSEnding;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6864,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>","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":"^Roam-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6910,"Code":"CHK","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-HTB;<>;STATUS=<>;TIME=<>;BATP=<>;SIGNAL=<>;WM=<>;GENERAL=<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Eview-HTB;[^;]*;STATUS=[^;;]*;TIME=[^;;]*;BATP=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6891,"Code":"BATL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-BATL;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-BATL;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6892,"Code":"BATF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-BATF;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-BATF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6894,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALNM;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALNM;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6875,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALSOS;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALSOS;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6896,"Code":"ALMOV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALMOV;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALMOV;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6899,"Code":"ALA","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALA;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALA;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6884,"Code":"F-ACK-No Memory","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300CFB3<>7F0125","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":"^Roam-ACK;[^;]*;AB000300CFB3[^ ]*7F0125","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6901,"Code":"F-ACK-Invalid Parameter","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300EEA3<>7F0124","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":"^Roam-ACK;[^;]*;AB000300EEA3[^ ]*7F0124","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6889,"Code":"F-ACK-Data Size Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB00030028C3<>7F0122","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":"^Roam-ACK;[^;]*;AB00030028C3[^ ]*7F0122","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6905,"Code":"F-ACK-Command Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003009C85<>7F0115","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":"^Roam-ACK;[^;]*;AB0003009C85[^ ]*7F0115","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6865,"Code":"ACK-Out Of Service","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003005BF1<>7F0130","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":"^Roam-ACK;[^;]*;AB0003005BF1[^ ]*7F0130","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6935,"Code":"ACK-HB-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set heart beat<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4918,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionConfigurationMode","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nif (params.Controls.ConfigurationMode == 'true') {\r\n var data = `GPRSHB1M`;\r\n} else {\r\n var data = `GPRSHB0M`; //`GPRSHB240S`;\r\n}\r\nAddValue('data', data);\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^Set heart beat[^t]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6934,"Code":"ACK-EPHONE","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set contact number 1 ok.|Configuracin numero contacto 1 ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4962,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setEmergencySettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar messageBody = '02';\r\nvar key = '30';\r\nvar phone_number = '00000000000';\r\nvar numberHex = '';\r\nvar sosKeyLength = '00';\r\n//var confFall = '1100'; // Enable, Dial\r\nvar confSOS = '10100000'; // Enable, no SMS, Toggle Call, No Sim Dialing, Contact Number 1\r\nvar dataSMS = '';\r\nif (params.AlertSettings.EmergencyNumber) {\r\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\r\n phone_number = params.AlertSettings.EmergencyNumber;\r\n numberHex = ascii_to_hexa(phone_number).toUpperCase();\r\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n messageBody += sosKeyLength + key + confSOS + numberHex;\r\n dataSMS = `A1,0,1,${phone_number}`;\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLength = changeEndianness(totalLength);\r\n//totalLength = '1000'; //better to calculate it\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":3},"CacheImei":false,"RegEx":"^(Set contact number 1 ok.|Configuracin numero contacto 1 ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6933,"Code":"ACK-SERV-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"GRPS:<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4954,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings5","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'GPRS?'; // Check Server Details\r\n/*GRPS: ON\r\nAPN: internet\r\nUsername:\r\nPassword:\r\nIP: 1, www.smart-locator.com\r\nPort: 6060\r\nMove report time: 30 minutes\r\nNo move report time: 60 minutes\r\nHB: on, 20 minutes */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"CommandToUpdateId":null,"ParentId":3687,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":21},"CacheImei":false,"RegEx":"^GRPS:[^:]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6932,"Code":"ACK-CONTAC-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"A1:<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4955,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings4","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'A?'; // Check Contact List\r\n/* A1: 1,1,15899795842\r\nA2: 1,0,13632770106\r\nA3: 0,1,15986236978 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"CommandToUpdateId":null,"ParentId":3687,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":20},"CacheImei":false,"RegEx":"^A1:[^:]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6931,"Code":"ACK-BEAC-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"1,<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4956,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings3","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'BCQ1'; // Check Beacon List\r\n/* 1,F7:37:B7:10:81:CE,office1\r\n2,C4:9F:A6:15:24:3F,office2\r\n3,D3:E3:AC:86:5E:46,office7 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"CommandToUpdateId":null,"ParentId":3687,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":19},"CacheImei":false,"RegEx":"^1,[^,]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6930,"Code":"ACK-FALLSENS-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Mode:<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4968,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings2","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'status'; // Check fall sens (function settings)\r\n/* Mode:4,0 second\r\nLED: on\r\nBeep: on\r\nVibration: on\r\nTime zone: +10:00\r\nGEO Fence:0,0,0,0\r\nMotion alarm: off\r\nNo Motion alarm: off\r\nTilt alert: off\r\nFall alarm: on, level:5\r\nLow power alarm: on,15%\r\nSOS Call:10 minutes, loop:1 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"CommandToUpdateId":null,"ParentId":3687,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":18},"CacheImei":false,"RegEx":"^Mode:[^:]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6928,"Code":"ACK-FIRM-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"IMEI:<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4958,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '214A1A3440414243567356101F4453473330';\r\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\n//var keyLength = '10'; // previous\r\nvar keyLength = '13';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":17},"CacheImei":false,"RegEx":"^IMEI:[^:]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6927,"Code":"ACK-GDATA","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-GDATA;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4958,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '214A1A3440414243567356101F4453473330';\r\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\n//var keyLength = '10'; // previous\r\nvar keyLength = '13';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":17},"CacheImei":false,"RegEx":"^Roam;ACK-GDATA;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6926,"Code":"ACK-SRV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set IP ok.|Configuracin de IP OK}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4959,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setServer","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local APN':\r\n//var params = {CommunicationSettings:{'SMSGateway':'+34666777888,Esendex','APN':'','APNOld':'','Server':'52.174.17.77,5678','ServerOld':''}}\r\n// AB101B 0066840300 021043802E1635322E3137342E31372E373704406D326D01410142\r\n// AB1015 00 66 84 F5 4B 02 10 43 80 2E 16 35 32 2E 31 37 34 2E 31 37 2E 37 37 04 40 6D 32 6D 01 41 01 42 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) APN and Server and Gateway Number\r\nvar messageBody = '02';\r\n// Server\r\nvar domain = '';\r\nvar port = '';\r\nvar serverLength = '00';\r\n// APN\r\nvar apn = '';\r\nvar apn_password = '';\r\nvar apn_username = '';\r\nvar apnLength = '00';\r\nvar apnUserLength = '00';\r\nvar apnPassLength = '00';\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n domain = serverString[0];\r\n port = serverString[1];\r\n port = changeEndianness(decimalToHex(parseInt(port))).toUpperCase();\r\n // Server IP and Port\r\n domain = ascii_to_hexa(domain).toUpperCase();\r\n serverLength = ('00' + decimalToHex(2 + port.length / 2 + domain.length / 2)).slice(-2).toUpperCase();\r\n // key 43 and TCP and GPRS is 80\r\n messageBody += serverLength + \"4380\" + port + domain;\r\n // For SMS\r\n dataSMS = `IP1,${serverString[0]},${serverString[1]}`;\r\n}\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n // APN\r\n apn = apnString[0];\r\n apn = ascii_to_hexa(apn).toUpperCase();\r\n apnLength = ('00' + decimalToHex(1 + apn.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnLength + \"40\" + apn;\r\n // APN username\r\n apn_username = apnString[1];\r\n apn_username = ascii_to_hexa(apn_username).toUpperCase();\r\n apnUserLength = ('00' + decimalToHex(1 + apn_username.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnUserLength + \"41\" + apn_username;\r\n // APN passwprd\r\n apn_password = apnString[2];\r\n apn_password = ascii_to_hexa(apn_password).toUpperCase();\r\n apnPassLength = ('00' + decimalToHex(1 + apn_password.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnPassLength + \"42\" + apn_password;\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":1},"CacheImei":false,"RegEx":"^(Set IP ok.|Configuracin de IP OK)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6925,"Code":"ACK-GTW","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set contact number 10 ok.|Configuracin numero contacto 10 ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4960,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setGateway","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar messageBody = '02';\r\nvar key = '30';\r\nvar phone_number = '00000000000';\r\nvar numberHex = '';\r\nvar sosKeyLength = '00';\r\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.SMSGateway) {\r\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\r\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\r\n var gateway = gatewayString[1];\r\n gateway_number = gatewayString[0];\r\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\r\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n messageBody += sosKeyLength + key + confSOS + numberHex;\r\n dataSMS = `A10,1,0,${phone_number}`;\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLength = changeEndianness(totalLength);\r\n//totalLength = '1000'; //better to calculate it\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":2},"CacheImei":false,"RegEx":"^(Set contact number 10 ok.|Configuracin numero contacto 10 ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6924,"Code":"ACK-FALLSENS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set fall down alarm ok!|Configuracin alarma caida ok!}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4961,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setFallSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) Fall sensitivity\r\nvar messageBody = '02';\r\nvar sensitivity = '';\r\nvar dataSMS = '';\r\nvar value = ''\r\nif (params.FallSettings.EnableDisableFallSettings == 'true') {\r\n value += '1'\r\n value += '100' //Dial\r\n //}\r\n if (params.FallSettings.Sensitivity) {\r\n var sensiString = params.FallSettings.Sensitivity.split(',');\r\n var level = sensiString[1];\r\n sensitivity = parseInt(sensiString[0]);\r\n // For SMS\r\n dataSMS = `FL1,${sensitivity},1`;\r\n //numberHex = ascii_to_hexa(sensitivity).toUpperCase();\r\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\r\n value += sensitivity\r\n }\r\n} else {\r\n value = '00000000'\r\n dataSMS = `FL0,1,1`;\r\n}\r\n// create HEADER\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\r\nvar command = '02'\r\nvar keyLength = '02'\r\nvar key = '56'\r\nvar messageBody = command + keyLength + key + value\r\nvar checksum = byteStringToByteArray(messageBody)\r\nchecksum = crc16byte(checksum)\r\nchecksum = decimalToHex(checksum)\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\r\nchecksum = changeEndianness(checksum)\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\r\nvar data = prefix + messageBody\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":4},"CacheImei":false,"RegEx":"^(Set fall down alarm ok!|Configuracin alarma caida ok!)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6923,"Code":"ACK-APN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set APN ok.|Configuracin APN OK.}}","HasTemplateGlobal":false,"ResponseTemplate":"ok1","TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4963,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setAPN","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local APN':\r\n//var params = {CommunicationSettings:{'SMSGateway':'+34666777888,Esendex','APN':'','APNOld':'','Server':'52.174.17.77,5678','ServerOld':''}}\r\n// AB101B 0066840300 021043802E1635322E3137342E31372E373704406D326D01410142\r\n// AB1015 00 66 84 F5 4B 02 10 43 80 2E 16 35 32 2E 31 37 34 2E 31 37 2E 37 37 04 40 6D 32 6D 01 41 01 42 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) APN and Server and Gateway Number\r\nvar messageBody = '02';\r\n// Server\r\nvar domain = '';\r\nvar port = '';\r\nvar serverLength = '00';\r\n// APN\r\nvar apn = '';\r\nvar apn_password = '';\r\nvar apn_username = '';\r\nvar apnLength = '00';\r\nvar apnUserLength = '00';\r\nvar apnPassLength = '00';\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n domain = serverString[0];\r\n port = serverString[1];\r\n port = changeEndianness(decimalToHex(parseInt(port))).toUpperCase();\r\n // Server IP and Port\r\n domain = ascii_to_hexa(domain).toUpperCase();\r\n serverLength = ('00' + decimalToHex(2 + port.length / 2 + domain.length / 2)).slice(-2).toUpperCase();\r\n // key 43 and TCP and GPRS is 80\r\n messageBody += serverLength + \"4380\" + port + domain;\r\n}\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n // APN\r\n apn = apnString[0];\r\n apn = ascii_to_hexa(apn).toUpperCase();\r\n apnLength = ('00' + decimalToHex(1 + apn.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnLength + \"40\" + apn;\r\n // APN username\r\n apn_username = apnString[1];\r\n apn_username = ascii_to_hexa(apn_username).toUpperCase();\r\n apnUserLength = ('00' + decimalToHex(1 + apn_username.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnUserLength + \"41\" + apn_username;\r\n // APN passwprd\r\n apn_password = apnString[2];\r\n apn_password = ascii_to_hexa(apn_password).toUpperCase();\r\n apnPassLength = ('00' + decimalToHex(1 + apn_password.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnPassLength + \"42\" + apn_password;\r\n // For SMS\r\n dataSMS = `S1,${apnString[0]},${apnString[1]},${apnString[2]}`;\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":0},"CacheImei":false,"RegEx":"^(Set APN ok.|Configuracin APN OK.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6922,"Code":"ACK-RTL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Device location request have received!|Solicitud de ubicacin recibida!}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4964,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionRealTimeLocation","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '01';\r\nvar key = '12';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\nGPS Loc!\r\nNow:\r\nLoc Time:07/04/2021 17:36:44\r\nSpeed:0km/h\r\nAltitude:97.0\r\nBattery:57%\r\nwww.google.com/maps?q=22.6537233,114.0006070\r\n*/\r\nvar dataSMS = 'loc';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":10},"CacheImei":false,"RegEx":"^(Device location request have received!|Solicitud de ubicacin recibida!)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6921,"Code":"ACK-TRACE","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set live tracking","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4965,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionTrace","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '01';\r\nvar key = '13';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\nSet live tracking every 10 seconds and last for 10 minutes ok.\r\n*/\r\nvar dataSMS = 'CL10s,600s'; // CL(interval),(duration)\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":3,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":11},"CacheImei":false,"RegEx":"^Set live tracking","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6920,"Code":"ACK-GSRV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-GSRV;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4966,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getServer","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar value = '43'; //Ask for Server\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":null},"CacheImei":false,"RegEx":"^Roam;ACK-GSRV;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6919,"Code":"ACK-GAPN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-GAPN;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4967,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getAPN","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar value = '40'; //Ask for APN\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":null},"CacheImei":false,"RegEx":"^Roam;ACK-GAPN;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6918,"Code":"ACK-OFF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Power OFF!!!","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4971,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionPowerOff","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '14';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'off';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":14},"CacheImei":false,"RegEx":"^Power OFF!!!","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6917,"Code":"ACK-FLU","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{flush ok.|Borrar ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4969,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionDeleteRecords","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '10';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'flush';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":9},"CacheImei":false,"RegEx":"^(flush ok.|Borrar ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6916,"Code":"ACK-RST","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set ok.|reset ok.|Reiniciar ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4981,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionFactoryReset","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nvar configsSMS = [];\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '04';\nvar keyLength = '01';\nvar key = '11';\nvar messageBody = command + keyLength + key;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\nvar data = prefix + messageBody;\n// For GPRS command\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\n// For SMS command\nvar dataSMS = 'ineedtoresetEV-06A!';\nAddValueSMS('dataSMS', dataSMS);\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS\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) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":15},"CacheImei":false,"RegEx":"^(Set ok.|reset ok.|Reiniciar ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6915,"Code":"ACK-PREFIX","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"remove prefix ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4984,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setSMSPrefix","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nif (params.SMSPrefix.SMSPrefix == 'true') { //Enable Prefix for SMS anwers\r\n if (params.SMSPassword.SMSPasswordOld) {\r\n var data = `${params.SMSPassword.SMSPasswordOld}Prefix1,Rio-${serverParams.Imei}-`;\r\n } else {\r\n var data = `Prefix1,Rio-${serverParams.Imei}-`;\r\n }\r\n} else {\r\n var data = `Prefix0,`; //Disable Prefix for SMS anwers\r\n}\r\nAddValue('data', data);\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":2,"Order":null},"CacheImei":false,"RegEx":"^remove prefix ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6914,"Code":"RTL-GPS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Now:Loc Time: |Ubicacin GPS:Tiempo de Loc: }}<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4983,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionRequestLocation","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nif (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}loc`\n} else {\n var data = `loc`\n}\nAddValue('data', data)\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":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^(Now:Loc Time: |Ubicacin GPS:Tiempo de Loc: )[^)]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6913,"Code":"ACK-RBT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{reboot ok.|Reiniciar ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4982,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionDeviceReboot","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '12';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'reboot';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":13},"CacheImei":false,"RegEx":"^(reboot ok.|Reiniciar ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6911,"Code":"F-ACK-Invalid State","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB00030009D3<>7F0123","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":"^Roam-ACK;[^;]*;AB00030009D3[^ ]*7F0123","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6909,"Code":"ZNO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"+RESP:ZOUT,<>,<>,<>,<>,<>,<>,<>,<>$","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":"\\+RESP:ZOUT,[^,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6908,"Code":"ZNI","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"+RESP:ZIN,<>,<>,<>,<>,<>,<>,<>,<>$","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":"\\+RESP:ZIN,[^,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6907,"Code":"F-ACK-GPS Is Not Ready","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003008D93<>7F0127","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":"^Roam-ACK;[^;]*;AB0003008D93[^ ]*7F0127","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6906,"Code":"F-ACK-Data Format Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003004BF3<>7F0121","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":"^Roam-ACK;[^;]*;AB0003004BF3[^ ]*7F0121","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6904,"Code":"F-ACK-Key Length Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300DEA5<>7F0117","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ACK;[^;]*;AB000300DEA5[^ ]*7F0117","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6903,"Code":"CHK-ASSO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-ASSOCIATE;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Eview-ASSOCIATE;[^;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6902,"Code":"RTL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-RTL;<>;<>;<>;<>;<>;<>;<>;<>;<>;","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":"^Roam-RTL;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6900,"Code":"F-ACK-SubFunction Not Supported","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300AC83<>7F0126","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":"^Roam-ACK;[^;]*;AB000300AC83[^ ]*7F0126","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6898,"Code":"ALA-C","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ALA-C;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-ALA-C;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6897,"Code":"ALF-C","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ALF-C;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-ALF-C;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6895,"Code":"ALF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALF;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6893,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-BATCF;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-BATCF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6890,"Code":"COMM-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-SMS;<>;<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":"esendex<>esendex<>","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-SMS;[^;]*;[^;]*","RegExGlobal":"^esendex[^e]*esendex[^x]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6887,"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":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6886,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-BATCN;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-BATCN;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6883,"Code":"ALA-O","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ALA-O;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-ALA-O;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6882,"Code":"ENC-2","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"","HasTemplateGlobal":true,"ResponseTemplate":"<>","TemplateGlobal":"AB00<>","LongConnection":true,"HexString":true,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"","RegExGlobal":"^AB00[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6881,"Code":"RTL-BEACON","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Beacon:Loc Time: <>","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":"^Beacon:Loc Time: [^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6879,"Code":"ENC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":true,"NoOperation":false,"Type":0,"Template":"","HasTemplateGlobal":true,"ResponseTemplate":"<>","TemplateGlobal":"AB10<>","LongConnection":true,"HexString":true,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"","RegExGlobal":"^AB10[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6878,"Code":"PWRN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-PWRN;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-PWRN;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6877,"Code":"PWRF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-PWRF;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-PWRF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6876,"Code":"HRT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>;TLEVEL=<>;LABEL=<>","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":"^Roam-HRT;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^;;]*;TLEVEL=[^;;]*;LABEL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6874,"Code":"RTL-WIFI","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Wifi and GSM:Loc Time: <>","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":"^Wifi and GSM:Loc Time: [^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6873,"Code":"F-ACK-Key Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300FFB5<>7F0116","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":"^Roam-ACK;[^;]*;AB000300FFB5[^ ]*7F0116","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6872,"Code":"COMM-GT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview;<>;<>;Get timestamp","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Eview;[^;]*;[^;;]*;Get timestamp","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6871,"Code":"F-ACK-Checksum Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300BD95<>7F0114","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":"^Roam-ACK;[^;]*;AB000300BD95[^ ]*7F0114","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6870,"Code":"ACK-global","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB00030008C7<>7F0100","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ACK;[^;]*;AB00030008C7[^ ]*7F0100","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6869,"Code":"F-ACK-Length Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003005AE5<>7F0113","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":"^Roam-ACK;[^;]*;AB0003005AE5[^ ]*7F0113","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6868,"Code":"F-ACK-Encryption Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003007BF5<>7F0112","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":"^Roam-ACK;[^;]*;AB0003007BF5[^ ]*7F0112","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6867,"Code":"F-ACK-Version Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB00030018C5<>7F0111","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":"^Roam-ACK;[^;]*;AB00030018C5[^ ]*7F0111","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6866,"Code":"F-ACK-Address Resp","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003006262<>7F0128","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":"^Roam-ACK;[^;]*;AB0003006262[^ ]*7F0128","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6863,"Code":"F-ACK-BLE Password","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300CC8F<>7F0140","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":"^Roam-ACK;[^;]*;AB000300CC8F[^7;]*7F0140","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]}],"Commands":[{"Id":5348,"Name":"setWifiList","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local WIFI Settings':\r\n//var params = {WiFiConnect:{'EnableDisableWiFiConnect':'false','SSID':'wifi_name','Password':'wifi_password'}}\r\n// Test enabled\r\n// AB 10 1C 00 98 78 00 00 02 1A 4A 80 09 0D 77 69 66 69 5F 6E 61 6D 65 77 69 66 69 5F 70 61 73 73 77 6F 72 64 \r\n// test disabled\r\n// AB 10 06 00 71 04 01 00 02 04 4A 00 00 00 \r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar idsToUpdate = [];\r\nvar deletedId = [];\r\nvar notSend = false;\r\n// WiFi\r\nvar network = '';\r\nvar pass = '';\r\nvar bodyLength = '00';\r\nvar networkLength = '00';\r\nvar passLength = '00';\r\nvar dataSMS = '';\r\n// configuration command (0X02) WiFi Connect Network\r\nvar value = '02';\r\nvar keyLength = '00';\r\nvar confWifi = '';\r\n//check if a number was deleted, and remove it from the list\r\nlet counter = 0;\r\nfor (var wifiChanged of paramsChanged.WiFiList) {\r\n // update ids\r\n var wifis = paramsChangedIds.WiFiList[counter];\r\n for (var item in wifis) {\r\n idsToUpdate.push(wifis[item]);\r\n }\r\n if (wifiChanged.Deleted === \"true\") {\r\n deletedId.push(wifiChanged);\r\n }\r\n counter++;\r\n}\r\n//iterate over approved wifi networks, \r\ncounter = 0;\r\nfor (var wifi in params.WiFiList) {\r\n confWifi = '8' + ('00' + decimalToHex(parseInt(wifi))).slice(-1).toUpperCase(); // Enable wifi index \r\n if (deletedId.length > 0) {\r\n if (checkValue(wifi) === true) {\r\n confWifi = ('00' + decimalToHex(wifi)).slice(-2).toUpperCase(); // Add wifi index\r\n value += `044A${confWifi}0000`; // No SSID, No password \r\n } else {\r\n if (params.WiFiList[wifi].SSID) {\r\n network = ascii_to_hexa(params.WiFiList[wifi].SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiList[wifi].Password) {\r\n pass = ascii_to_hexa(params.WiFiList[wifi].Password).toUpperCase();\r\n passLength = ('00' + decimalToHex(pass.length / 2)).slice(-2).toUpperCase();\r\n }\r\n keyLength = ('00' + decimalToHex(4 + network.length / 2 + pass.length / 2)).slice(-2).toUpperCase();\r\n // key 4A\r\n value += keyLength + '4A' + confWifi + networkLength + passLength + network + pass;\r\n }\r\n } else {\r\n if (params.WiFiList[wifi].SSID) {\r\n network = ascii_to_hexa(params.WiFiList[wifi].SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiList[wifi].Password) {\r\n pass = ascii_to_hexa(params.WiFiList[wifi].Password).toUpperCase();\r\n passLength = ('00' + decimalToHex(pass.length / 2)).slice(-2).toUpperCase();\r\n }\r\n keyLength = ('00' + decimalToHex(4 + network.length / 2 + pass.length / 2)).slice(-2).toUpperCase();\r\n // key 4A\r\n value += keyLength + '4A' + confWifi + networkLength + passLength + network + pass;\r\n }\r\n counter++;\r\n}\r\n//disable other wifi networks\r\n// 02 04 4A 02 00 00\r\nfor (counter; counter < 5; counter++) {\r\n confWifi = ('00' + decimalToHex(counter)).slice(-2).toUpperCase(); // Add wifi index\r\n value += `044A${confWifi}0000`; // No SSID, No password \r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(value.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(value);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + value;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n idsToUpdate: idsToUpdate,\r\n notSend: notSend\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 checkValue(contact) {\r\n for (var d in deletedId) {\r\n if (params.WiFiList[contact].SSID == paramsChanged.WiFiList[d].SSID) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5346,"Name":"setWifiSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local WIFI Settings':\r\n//var params = {WiFiConnect:{'EnableDisableWiFiConnect':'false','SSID':'wifi_name','Password':'wifi_password'}}\r\n// Test enabled\r\n// AB 10 1C 00 98 78 00 00 02 1A 4A 80 09 0D 77 69 66 69 5F 6E 61 6D 65 77 69 66 69 5F 70 61 73 73 77 6F 72 64 \r\n// test disabled\r\n// AB 10 06 00 71 04 01 00 02 04 4A 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) WiFi Connect Network\r\nvar messageBody = '02';\r\n// WiFi\r\nvar network = '';\r\nvar pass = '';\r\nvar bodyLength = '00';\r\nvar networkLength = '00';\r\nvar passLength = '00';\r\nvar dataSMS = '';\r\nif (params.WiFiSettings.EnableDisableWiFiSettings == 'true') {\r\n if (params.WiFiSettings.SSID) {\r\n network = ascii_to_hexa(params.WiFiSettings.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiSettings.Password) {\r\n pass = ascii_to_hexa(params.WiFiSettings.Password).toUpperCase();\r\n passLength = ('00' + decimalToHex(pass.length / 2)).slice(-2).toUpperCase();\r\n }\r\n bodyLength = ('00' + decimalToHex(4 + network.length / 2 + pass.length / 2)).slice(-2).toUpperCase();\r\n // key 4A and enable, not connected and index 0 = 80\r\n messageBody += bodyLength + \"4A80\" + networkLength + passLength + network + pass;\r\n} else {\r\n messageBody += '044A000000';\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5015,"Name":"getSystemSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '33'; //System settings - allow list\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data); // For GPRS command\r\nAddValue('sequenceNumber', sequenceID);\r\n//AddValueSMS('dataSMS', dataSMS); // For SMS command\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":5014,"Name":"getVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar value = '34'; //10 Ring tone Volume\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":24,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5013,"Name":"setSystemSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = '00000000000000000100'; // A1 phone monitor Enable as default documentation\r\nif (params.SystemSettings.AllowList == 'true') { // Enable SMS Whitelist Setting\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\n//if (params.PhoneSettings.SilentCallMode == 'true') {\r\n// value += '1';\r\n//} else {\r\nvalue += '0';\r\n//}\r\n//if (params.PhoneSettings.ButtonHangUp == 'true') {\r\n// value += '1';\r\n//} else {\r\nvalue += '1'; // ButtonHangUp Default True\r\n//}\r\nif (params.SystemSettings.AllowList == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.SystemSettings.AutoAnswer == 'true') {\r\n value += '1';\r\n // if (params.PhoneSettings.AutoAnswerAfterRings) {\r\n // value += ('0000000' + decimalToBinary(parseInt(params.PhoneSettings.AutoAnswerAfterRings))).slice(-7);\r\n // } else {\r\n value += ('0000011'); // default 3\r\n // }\r\n} else {\r\n value += '00000000';\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '33';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('')\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF)\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('')\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":3,"SendAttempts":3,"ProtocolActionObjects":[],"Tags":[]},{"Id":5010,"Name":"getCustomId","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '47'; //Get device or custom id \r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":8,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5008,"Name":"getNoMotionAlert","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '53'; //No motion Alert code\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":7,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5007,"Name":"getFallDownAlert","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '56'; //Fall down Alert code\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":8,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5005,"Name":"getPerformanceMode","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '44'; //time interval\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\n/* IMEI:863921033969786\r\nGSM signal quality: 15\r\nSoftware version: V07BX.8601.2109\r\nversion: V1.0.29.1 */\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":23,"SendAttempts":7,"ProtocolActionObjects":[],"Tags":[]},{"Id":5004,"Name":"getSystemLanguage","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '1F'; //System language - locale\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data); // For GPRS command\r\nAddValue('sequenceNumber', sequenceID);\r\n//AddValueSMS('dataSMS', dataSMS); // For SMS command\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":22,"SendAttempts":3,"ProtocolActionObjects":[],"Tags":[]},{"Id":5003,"Name":"getHomeBeacon","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = ''; //get home beacon\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '09';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\n/* IMEI:863921033969786\r\nGSM signal quality: 15\r\nSoftware version: V07BX.8601.2109\r\nversion: V1.0.29.1 */\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":3,"ProtocolActionObjects":[],"Tags":[]},{"Id":5002,"Name":"getAuthorisedNumbers","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = ''; //get top 10 authorised numbers\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '09';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\n/* IMEI:863921033969786\r\nGSM signal quality: 15\r\nSoftware version: V07BX.8601.2109\r\nversion: V1.0.29.1 */\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":3,"ProtocolActionObjects":[],"Tags":[]},{"Id":4918,"Name":"actionConfigurationMode","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nif (params.Controls.ConfigurationMode == 'true') {\r\n var data = `GPRSHB1M`;\r\n} else {\r\n var data = `GPRSHB0M`; //`GPRSHB240S`;\r\n}\r\nAddValue('data', data);\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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4918,\"Name\":\"actionConfigurationMode\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nif (params.Controls.ConfigurationMode == 'true') {\\r\\n var data = `GPRSHB1M`;\\r\\n} else {\\r\\n var data = `GPRSHB240S`; //`GPRSHB0M`;\\r\\n}\\r\\nAddValue('data', data);\\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}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734458640}],"Tags":[]},{"Id":4980,"Name":"setServerSMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n var domain = serverString[0];\r\n var port = serverString[1];\r\n dataSMS = `IP1,${domain},${port}`;\r\n //if (params.SMSPassword.SMSPasswordOld) {\r\n // var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\r\n //} else {\r\n // var data = `IP1,${domain},${port}`;\r\n //}\r\n}\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4976,"Name":"setEmergencyNumberbySMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.EmergencySettings.EmergencyNumber) {\r\n var phone_number = params.EmergencySettings.EmergencyNumber;\r\n dataSMS = `A1,0,1,${phone_number}`;\r\n //if (params.SMSPassword.SMSPasswordOld) {\r\n // var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\r\n //} else {\r\n // var data = `IP1,${domain},${port}`;\r\n //}\r\n}\r\n// Reply from device \"Set contact number 1 ok.\"\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4975,"Name":"setFallSensitivitybySMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.EmergencySettings.FallSensitivity) {\r\n var sensitivity = parseInt(params.EmergencySettings.FallSensitivity);\r\n dataSMS = `FL1,${sensitivity},1`;\r\n}\r\n// Reply from device \"Set fall down alarm ok!\"\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4940,"Name":"setBeacons","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local Beacon':\r\n//AB10C800F6640902021F73805F03002160C000000000000000004556303642617365436861726765721E73817016BAE84BF50000000000000000456E74726164614F666963696E6110730200000000000000000000000000001073030000000000000000000000000000107304000000000000000000000000000010730500000000000000000000000000001073060000000000000000000000000000107307000000000000000000000000000010730800000000000000000000000000001073090000000000000000000000000000//var params = {'HomeBeacon': [{'Beacon':'EV06 Base Charger,1C0:60:21:00:03:5F','Name':'Beacon1'},{'Beacon':'EntradaOficina,F5:4B:E8:BA:16:70','Name':'Beacon2'} ]};\r\n//var params = {'HomeBeacon': {'BeaconName': [{'Number':'1','Name':'Contact1'},{'Number':'2','Name':'Contact2'} ]}};\r\nvar configs = [];\r\nvar idsToUpdate = [];\r\nvar deletedId = []\r\nvar counter = 0;\r\nvar notSend = false;\r\nvar numberLength = '00';\r\nvar numberHex = ''; // MAC\r\nvar nameLength = '00';\r\nvar nameHex = ''; // Description\r\nvar value = '02';\r\nvar keyLength = '00';\r\nvar confTel = ''; // for index and enable//disable\r\nvar beaconString = '';\r\nvar beacon_name = '';\r\nvar beacon_mac = '';\r\nfor (var contactChanged of paramsChanged.BeaconList) {\r\n var contacts = paramsChangedIds.BeaconList[counter]; //counter\r\n for (var item in contacts) {\r\n idsToUpdate.push(contacts[item]);\r\n }\r\n if (contactChanged.Deleted === \"true\") {\r\n deletedId.push(contactChanged);\r\n // confTel = ('00' + decimalToHex(contactChanged)).slice(-2).toUpperCase(); // Add beacon number\r\n // value += \"1073\" + confTel + '0000000000000000000000000000'; //no name, mac nor lat//long\r\n }\r\n //counter++;\r\n}\r\n//var index = params.BeaconList.length;\r\nfor (var contact in params.BeaconList) {\r\n //console.log(parseInt(contact)+1);\r\n confTel = '8' + ('00' + decimalToHex(parseInt(contact))).slice(-1).toUpperCase(); // Add contact for the index\r\n if (deletedId.length > 0) {\r\n if (checkValue(contact) === true) {\r\n confTel = ('00' + decimalToHex(contact)).slice(-2).toUpperCase(); // Add beacon number\r\n value += \"1073\" + confTel + '0000000000000000000000000000'; //no name, mac nor lat//long\r\n } else {\r\n if (params.BeaconList[contact].Beacon !== null) {\r\n // name, mac, major, minor\r\n beaconString = params.BeaconList[contact].Beacon.split(',');\r\n beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, '')).toUpperCase();\r\n beacon_mac = beaconString[1].replace(/:/g, '');\r\n beacon_mac = changeEndianness(beacon_mac);\r\n } else {\r\n beaconString = 'empty,00:00:00:00:00:00';\r\n beaconString = beaconString.split(',');\r\n beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, '')).toUpperCase();\r\n beacon_mac = beaconString[1].replace(/:/g, '');\r\n }\r\n //let beacon_major = beaconString[2];\r\n //let beacon_minor = beaconString[3];\r\n //numberHex = ascii_to_hexa(params.HomeBeacon[contact].Beacon).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(params.HomeBeacon[contact].Beacon.length)).slice(-2).toUpperCase();\r\n //nameHex = ascii_to_hexa(params.HomeBeacon[contact].Name).toUpperCase();\r\n //nameLength = ('00' + decimalToHex(params.HomeBeacon[contact].Name.length)).slice(-2).toUpperCase();\r\n //keyLength = ('00' + decimalToHex(5 + params.HomeBeacon[contact].Beacon.length + params.HomeBeacon[contact].Name.length)).slice(-2).toUpperCase();\r\n keyLength = ('00' + decimalToHex(16 + (beacon_name.length / 2))).slice(-2).toUpperCase();\r\n value += keyLength + \"73\" + confTel + beacon_mac + '0000000000000000' + beacon_name; //no lat long\r\n }\r\n } else {\r\n if (params.BeaconList[contact].Beacon !== null) {\r\n // name, mac, major, minor\r\n beaconString = params.BeaconList[contact].Beacon.split(',');\r\n beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, '')).toUpperCase();\r\n beacon_mac = beaconString[1].replace(/:/g, '');\r\n beacon_mac = changeEndianness(beacon_mac);\r\n } else {\r\n beaconString = 'empty,00:00:00:00:00:00';\r\n beaconString = beaconString.split(',');\r\n beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, '')).toUpperCase();\r\n beacon_mac = beaconString[1].replace(/:/g, '');\r\n }\r\n //let beacon_major = beaconString[2];\r\n //let beacon_minor = beaconString[3];\r\n //numberHex = ascii_to_hexa(params.HomeBeacon[contact].Beacon).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(params.HomeBeacon[contact].Beacon.length)).slice(-2).toUpperCase();\r\n //nameHex = ascii_to_hexa(params.HomeBeacon[contact].Name).toUpperCase();\r\n //nameLength = ('00' + decimalToHex(params.HomeBeacon[contact].Name.length)).slice(-2).toUpperCase();\r\n //keyLength = ('00' + decimalToHex(5 + params.HomeBeacon[contact].Beacon.length + params.HomeBeacon[contact].Name.length)).slice(-2).toUpperCase();\r\n keyLength = ('00' + decimalToHex(16 + (beacon_name.length / 2))).slice(-2).toUpperCase();\r\n value += keyLength + \"73\" + confTel + beacon_mac + '0000000000000000' + beacon_name; //no lat long\r\n //index = index - 1;\r\n }\r\n counter++;\r\n}\r\n//disable other beacons\r\n// 10 73 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00\r\nfor (counter; counter < 10; counter++) {\r\n confTel = ('00' + decimalToHex(counter)).slice(-2).toUpperCase(); // Add beacon number\r\n value += \"1073\" + confTel + '0000000000000000000000000000'; //no name, mac nor lat//long\r\n}\r\n//for (var contactChanged of paramsChanged.BeaconList) {\r\n// var contacts = paramsChangedIds.BeaconList[counter];\r\n// for (var item in contacts) {\r\n// idsToUpdate.push(contacts[item]);\r\n// }\r\n//if (contactChanged.Deleted === \"true\") {\r\n// var cadena = contactChanged.Name + \":\" + contactChanged.Number + ',';\r\n// command = command.replace(cadena, '');\r\n//}\r\n// counter++;\r\n//}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(value.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(value);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + value;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n idsToUpdate: idsToUpdate,\r\n notSend: notSend\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 checkValue(contact) {\r\n for (var d in deletedId) {\r\n if (params.BeaconList[contact].Beacon == paramsChanged.BeaconList[d].Beacon) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4978,"Name":"setAPNSMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n var apn = apnString[0];\r\n var apn_username = apnString[1];\r\n var apn_password = apnString[2];\r\n dataSMS = `S1,${apn},${apn_username},${apn_password}`;\r\n //if (params.SMSPassword.SMSPasswordOld) {\r\n // data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\r\n //} else {\r\n // data = `S1,${apn},${apn_username},${apn_password}`;\r\n //}\r\n}\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4968,"Name":"getCurrentSettings2","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'status'; // Check fall sens (function settings)\r\n/* Mode:4,0 second\r\nLED: on\r\nBeep: on\r\nVibration: on\r\nTime zone: +10:00\r\nGEO Fence:0,0,0,0\r\nMotion alarm: off\r\nNo Motion alarm: off\r\nTilt alert: off\r\nFall alarm: on, level:5\r\nLow power alarm: on,15%\r\nSOS Call:10 minutes, loop:1 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"HasAck":true,"HexString":true,"Order":18,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4968,\"Name\":\"getCurrentSettings2\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar dataSMS = 'status'; // Check fall sens (function settings)\\r\\n/* Mode:4,0 second\\r\\nLED: on\\r\\nBeep: on\\r\\nVibration: on\\r\\nTime zone: +10:00\\r\\nGEO Fence:0,0,0,0\\r\\nMotion alarm: off\\r\\nNo Motion alarm: off\\r\\nTilt alert: off\\r\\nFall alarm: on, level:5\\r\\nLow power alarm: on,15%\\r\\nSOS Call:10 minutes, loop:1 */\\r\\nvar data = ''; // empty\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar notSend = false;\\r\\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\\r\\n notSend = true;\\r\\n}\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS,\\r\\n notSend: notSend\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":{\"Id\":4958,\"Protocol\":{\"Id\":224,\"Code\":\"Access TEC Roam\",\"Version\":\"0.2\",\"FirmwareVersion\":\"V04b.8601.2411.1.0.16.4411.2409.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":false},\"Name\":\"getCurrentSettings\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar value = '214A1A3440414243567356101F4453473330';\\r\\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n//var keyLength = '10'; // previous\\r\\nvar keyLength = '13';\\r\\nvar key = 'F0';\\r\\nvar messageBody = command + keyLength + key + value;\\r\\nvar dataSMS = 'V?'; // Get Firmware\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":17},\"AvoidResending\":false,\"FollowParentSentType\":true,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":18,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733390363}],"Tags":[]},{"Id":4919,"Name":"actionFindDevice","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar key = '13';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\n (no reply)\r\n*/\r\nvar dataSMS = 'findme';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":12,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4984,"Name":"setSMSPrefix","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nif (params.SMSPrefix.SMSPrefix == 'true') { //Enable Prefix for SMS anwers\r\n if (params.SMSPassword.SMSPasswordOld) {\r\n var data = `${params.SMSPassword.SMSPasswordOld}Prefix1,Rio-${serverParams.Imei}-`;\r\n } else {\r\n var data = `Prefix1,Rio-${serverParams.Imei}-`;\r\n }\r\n} else {\r\n var data = `Prefix0,`; //Disable Prefix for SMS anwers\r\n}\r\nAddValue('data', data);\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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4983,"Name":"actionRequestLocation","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nif (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}loc`\n} else {\n var data = `loc`\n}\nAddValue('data', data)\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":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4982,"Name":"actionDeviceReboot","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '12';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'reboot';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":13,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4982,\"Name\":\"actionDeviceReboot\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '04';\\r\\nvar keyLength = '01';\\r\\nvar key = '12';\\r\\nvar messageBody = command + keyLength + key;\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum).toUpperCase();\\r\\nchecksum = ('0000' + checksum).slice(-4);\\r\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\r\\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nvar dataSMS = 'reboot';\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":13,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734006832}],"Tags":[]},{"Id":4981,"Name":"actionFactoryReset","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nvar configsSMS = [];\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '04';\nvar keyLength = '01';\nvar key = '11';\nvar messageBody = command + keyLength + key;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\nvar data = prefix + messageBody;\n// For GPRS command\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\n// For SMS command\nvar dataSMS = 'ineedtoresetEV-06A!';\nAddValueSMS('dataSMS', dataSMS);\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS\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) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":15,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4981,\"Name\":\"actionFactoryReset\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n];\\nvar configs = [];\\nvar configsSMS = [];\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '04';\\nvar keyLength = '01';\\nvar key = '11';\\nvar messageBody = command + keyLength + key;\\nvar checksum = byteStringToByteArray(messageBody);\\nchecksum = crc16byte(checksum);\\nchecksum = decimalToHex(checksum).toUpperCase();\\nchecksum = ('0000' + checksum).slice(-4);\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\n// For GPRS command\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\n// For SMS command\\nvar dataSMS = 'ineedtoresetEV-06A!';\\nAddValueSMS('dataSMS', dataSMS);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS\\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) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction ascii_to_hexa(str) {\\n var arr1 = [];\\n for (var n = 0, l = str.length; n < l; n++) {\\n var hex = Number(str.charCodeAt(n)).toString(16);\\n arr1.push(hex);\\n }\\n return arr1.join('');\\n}\\n\\nfunction crc16byte(s) {\\n var crc = 0x0000;\\n var j, i;\\n for (i = 0; i < s.length; i++) {\\n c = s[i];\\n if (c > 255) {\\n throw new RangeError();\\n }\\n j = (c ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[j] ^ (crc << 8);\\n }\\n return ((crc ^ 0) & 0xFFFF);\\n}\\n\\nfunction byteStringToByteArray(str) {\\n var splitStr = []\\n var j = 0\\n for (let i = 0; i < str.length; i += 2) {\\n splitStr[j] = str.substring(i, i + 2)\\n j++\\n }\\n var bytes = []\\n var bytePos = 0\\n for (let i = 0; i < splitStr.length; i++) {\\n var byteStr = splitStr[i]\\n var b = parseInt(byteStr, 16)\\n if (b < 256) {\\n bytes[bytePos] = b\\n bytePos++\\n }\\n }\\n return bytes\\n}\\n\\nfunction decimalToHex(str) {\\n hexString = str.toString(16);\\n return hexString\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":15,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733955479},{"Type":1,"NewValue":"{\"Id\":4981,\"Name\":\"actionFactoryReset\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n];\\nvar configs = [];\\nvar configsSMS = [];\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '04';\\nvar keyLength = '01';\\nvar key = '11';\\nvar messageBody = command + keyLength + key;\\nvar checksum = byteStringToByteArray(messageBody);\\nchecksum = crc16byte(checksum);\\nchecksum = decimalToHex(checksum).toUpperCase();\\nchecksum = ('0000' + checksum).slice(-4);\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\n// For GPRS command\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\n// For SMS command\\nvar dataSMS = 'ineedtoresetEV04!';\\nAddValueSMS('dataSMS', dataSMS);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS\\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) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction ascii_to_hexa(str) {\\n var arr1 = [];\\n for (var n = 0, l = str.length; n < l; n++) {\\n var hex = Number(str.charCodeAt(n)).toString(16);\\n arr1.push(hex);\\n }\\n return arr1.join('');\\n}\\n\\nfunction crc16byte(s) {\\n var crc = 0x0000;\\n var j, i;\\n for (i = 0; i < s.length; i++) {\\n c = s[i];\\n if (c > 255) {\\n throw new RangeError();\\n }\\n j = (c ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[j] ^ (crc << 8);\\n }\\n return ((crc ^ 0) & 0xFFFF);\\n}\\n\\nfunction byteStringToByteArray(str) {\\n var splitStr = []\\n var j = 0\\n for (let i = 0; i < str.length; i += 2) {\\n splitStr[j] = str.substring(i, i + 2)\\n j++\\n }\\n var bytes = []\\n var bytePos = 0\\n for (let i = 0; i < splitStr.length; i++) {\\n var byteStr = splitStr[i]\\n var b = parseInt(byteStr, 16)\\n if (b < 256) {\\n bytes[bytePos] = b\\n bytePos++\\n }\\n }\\n return bytes\\n}\\n\\nfunction decimalToHex(str) {\\n hexString = str.toString(16);\\n return hexString\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":15,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734595853}],"Tags":[]},{"Id":4979,"Name":"setGatewayNumberbySMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.CommunicationSettings.SMSGateway) {\r\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\r\n var gateway_name = gatewayString[1];\r\n var gateway_number = gatewayString[0];\r\n dataSMS = `A10,1,0,${gateway_number}`;\r\n //if (params.SMSPassword.SMSPasswordOld) {\r\n // var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\r\n //} else {\r\n // var data = `IP1,${domain},${port}`;\r\n //}\r\n}\r\n// Reply from device \"Set contact number 10 ok.\"\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4977,"Name":"setPerformanceMode","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//Añadir comando para poner modo6 ??\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar command = '02';\r\nvar keyLength = '0D';\r\nvar key = '44'; // Time interval command\r\nvar cycleInterval = 60;\r\nvar lazyCycleInterval = 60;\r\nvar heartBeatStatus = '00000000'; //heartbeat OFF and heartBeat = 0; heartbeat ON and heartBeat = 240 F0000080; \r\nvar selectedMode = '2'; // Balanced mode\r\nif (params.PerformanceSettings.Mode) {\r\n selectedMode = params.PerformanceSettings.Mode;\r\n}\r\nvar value = '000000'; // Time interval to zero\r\nswitch (selectedMode) {\r\n case '0': // No reporting\r\n cycleInterval = 86400; // Time interval to 24 hrs \r\n lazyCycleInterval = 86400; // Lazy Time interval to 24 hrs \r\n // HB = 0\r\n break;\r\n case '1': //Power Saving\r\n cycleInterval = 28800; // Time interval to 8 hrs \r\n lazyCycleInterval = 43200; // Lazy Time interval to 12 hrs \r\n // HB = 0\r\n break;\r\n case '2': //Balanced\r\n cycleInterval = 600; // Time interval to 10 min \r\n lazyCycleInterval = 3600; // Lazy Time interval to 1 hrs \r\n heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240\r\n break;\r\n case '3': //High Freq\r\n cycleInterval = 240; // Time interval to 4 min \r\n lazyCycleInterval = 3600; // Lazy Time interval to 1 hrs\r\n heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240 \r\n break;\r\n default:\r\n var value = '000000'; // Time interval to zero\r\n //var valueSMS = '';\r\n}\r\n//Sms Value\r\nvar valueSMS = ',' + cycleInterval + 'S,' + lazyCycleInterval + 'S';\r\nvar value = parseInt(cycleInterval);\r\nif (params.Controls.ConfigurationMode == 'true') {\r\n heartBeatStatus = '3C000080'; //heartbeat ON and heartBeat = 60;\r\n} // else {\r\n// var heartBeatStatus = '00000000'; //heartbeat OFF and heartBeat = 0; heartbeat ON and heartBeat = 240 F0000080; \r\n//}\r\nvalue = decimalToHex(value);\r\nvalue = ('000000' + value).slice(-6).toUpperCase();\r\nvalue = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\nvar valueLazy = parseInt(lazyCycleInterval);\r\nvar valueLazy = decimalToHex(valueLazy);\r\nvalueLazy = ('000000' + valueLazy).slice(-6).toUpperCase();\r\nvalueLazy = valueLazy.substring(4, 6) + valueLazy.substring(2, 4) + valueLazy.substring(0, 2);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar messageBody = command + keyLength + key + heartBeatStatus + value + '00' + valueLazy + '00';\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\n//How to calculate sequenceID\r\nvar prefix = 'AB10' + '0F00' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'mode6' + valueSMS;\r\nAddValueSMS('dataSMS', dataSMS);\r\n//debug(data);\r\n//debug(dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4977,\"Name\":\"setPerformanceMode\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\n//Añadir comando para poner modo6 ??\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar command = '02';\\r\\nvar keyLength = '0D';\\r\\nvar key = '44'; // Time interval command\\r\\nvar cycleInterval = 60;\\r\\nvar lazyCycleInterval = 60;\\r\\nvar heartBeatStatus = '00000000'; //heartbeat OFF and heartBeat = 0; heartbeat ON and heartBeat = 240 F0000080; \\r\\nvar selectedMode = '2'; // Balanced mode\\r\\nif (params.PerformanceSettings.Mode) {\\r\\n selectedMode = params.PerformanceSettings.Mode;\\r\\n}\\r\\nvar value = '000000'; // Time interval to zero\\r\\nswitch (selectedMode) {\\r\\n case '0': // No reporting\\r\\n cycleInterval = 86400; // Time interval to 24 hrs \\r\\n lazyCycleInterval = 86400; // Lazy Time interval to 24 hrs \\r\\n // HB = 0\\r\\n break;\\r\\n case '1': //Power Saving\\r\\n cycleInterval = 28800; // Time interval to 8 hrs \\r\\n lazyCycleInterval = 43200; // Lazy Time interval to 12 hrs \\r\\n // HB = 0\\r\\n break;\\r\\n case '2': //Balanced\\r\\n cycleInterval = 600; // Time interval to 10 min \\r\\n lazyCycleInterval = 3600; // Lazy Time interval to 1 hrs \\r\\n //heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240\\r\\n break;\\r\\n case '3': //High Freq\\r\\n cycleInterval = 240; // Time interval to 4 min \\r\\n lazyCycleInterval = 3600; // Lazy Time interval to 1 hrs\\r\\n //heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240 \\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n //var valueSMS = '';\\r\\n}\\r\\n//Sms Value\\r\\nvar valueSMS = ',' + cycleInterval + 'S,' + lazyCycleInterval + 'S';\\r\\nvar value = parseInt(cycleInterval);\\r\\nif (params.Controls.ConfigurationMode == 'true') {\\r\\n heartBeatStatus = '3C000080'; //heartbeat ON and heartBeat = 60;\\r\\n} else {\\r\\n heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240; \\r\\n}\\r\\nvalue = decimalToHex(value);\\r\\nvalue = ('000000' + value).slice(-6).toUpperCase();\\r\\nvalue = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\nvar valueLazy = parseInt(lazyCycleInterval);\\r\\nvar valueLazy = decimalToHex(valueLazy);\\r\\nvalueLazy = ('000000' + valueLazy).slice(-6).toUpperCase();\\r\\nvalueLazy = valueLazy.substring(4, 6) + valueLazy.substring(2, 4) + valueLazy.substring(0, 2);\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar messageBody = command + keyLength + key + heartBeatStatus + value + '00' + valueLazy + '00';\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\r\\n//How to calculate sequenceID\\r\\nvar prefix = 'AB10' + '0F00' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nvar dataSMS = 'mode6' + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\n//debug(data);\\r\\n//debug(dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734459146}],"Tags":[]},{"Id":4974,"Name":"setRingToneVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nif (params.SystemSettings.Volume) {\n var volume = parseInt(params.SystemSettings.Volume);\n volume = decimalToHex(parseInt(volume));\n volume = ('00' + volume).slice(-2);\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '02';\nvar key = '10';\nvar messageBody = command + keyLength + key + volume;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID // change to AB10 from AB18\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\n//var commandConfigs = {\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4973,"Name":"setSpeakerVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.SystemSettings.Volume) {\n var volume = parseInt(params.SystemSettings.Volume)\n volume = decimalToHex(volume)\n volume = ('00' + volume).slice(-2).toUpperCase()\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '02'\nvar key = '12'\nvar messageBody = command + keyLength + key + volume\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum).toUpperCase()\nchecksum = ('0000' + checksum).slice(-4)\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4972,"Name":"setAlarmClock1","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.AlarmClock1.EnableDisableAlarmClock1 == 'true') {\n var index = '80';\n if (params.AlarmClock1.Time) {\n var hour = params.AlarmClock1.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2)\n hour = parseInt(hour)\n hour = decimalToHex(hour)\n hour = ('00' + hour).slice(-2).toUpperCase()\n var min = params.AlarmClock1.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4)\n min = parseInt(min)\n min = decimalToHex(min)\n min = ('00' + min).slice(-2).toUpperCase()\n } else {\n var hour = '0C'; // default time 12:00\n var min = '00';\n }\n //create the bit table to use with workdays\n var workday = 0\n if (params.AlarmClock1.Monday == 'true') {\n workday += 1\n }\n if (params.AlarmClock1.Tuesday == 'true') {\n workday += 2\n }\n if (params.AlarmClock1.Wednesday == 'true') {\n workday += 4\n }\n if (params.AlarmClock1.Thursday == 'true') {\n workday += 8\n }\n if (params.AlarmClock1.Friday == 'true') {\n workday += 16\n }\n if (params.AlarmClock1.Saturday == 'true') {\n workday += 32\n }\n if (params.AlarmClock1.Sunday == 'true') {\n workday += 64\n }\n workday = decimalToHex(workday).toUpperCase()\n workday = ('00' + workday).slice(-2).toUpperCase()\n if (params.AlarmClock1.Duration) {\n var duration = params.AlarmClock1.Duration\n duration = decimalToHex(parseInt(duration)).toUpperCase()\n duration = ('00' + duration).slice(-2).toUpperCase()\n } else {\n var duration = '1E';\n }\n var ring = '01'\n var value = index + hour + min + workday + duration + ring\n} else {\n value = '000000000101'\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '07'\nvar key = '0B'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar prefix = 'AB10' + '0900' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4971,"Name":"actionPowerOff","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '14';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'off';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":14,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4971,\"Name\":\"actionPowerOff\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '04';\\r\\nvar keyLength = '01';\\r\\nvar key = '14';\\r\\nvar messageBody = command + keyLength + key;\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum).toUpperCase();\\r\\nchecksum = ('0000' + checksum).slice(-4);\\r\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\r\\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nvar dataSMS = 'off';\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":14,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733955031}],"Tags":[]},{"Id":4970,"Name":"setNoDisturb","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nif (params.DoNotDisturb.EnableDisableNoDisturb == 'true') {\n var flag = '80';\n if (params.DoNotDisturb.Start) {\n var hourStart = params.DoNotDisturb.Start.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2);\n hourStart = parseInt(hourStart);\n hourStart = decimalToHex(hourStart);\n hourStart = ('00' + hourStart).slice(-2).toUpperCase();\n var minStart = params.DoNotDisturb.Start.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4);\n minStart = parseInt(minStart);\n minStart = decimalToHex(minStart);\n minStart = ('00' + minStart).slice(-2).toUpperCase();\n }\n if (params.DoNotDisturb.End) {\n var hourEnd = params.DoNotDisturb.End.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2);\n hourEnd = parseInt(hourEnd);\n hourEnd = decimalToHex(hourEnd);\n hourEnd = ('00' + hourEnd).slice(-2).toUpperCase();\n var minEnd = params.DoNotDisturb.End.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4);\n minEnd = parseInt(minEnd);\n minEnd = decimalToHex(minEnd);\n minEnd = ('00' + minEnd).slice(-2).toUpperCase();\n }\n} else {\n var flag = '00';\n var hourStart, hourEnd, minStart, minEnd;\n hourStart = hourEnd = minStart = minEnd = '00';\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '06';\nvar key = '0C';\nvar messageBody = command + keyLength + key + flag + hourStart + minStart + hourEnd + minEnd;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0800' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4969,"Name":"actionDeleteRecords","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '10';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'flush';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":9,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4967,"Name":"getAPN","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar value = '40'; //Ask for APN\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4966,"Name":"getServer","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar value = '43'; //Ask for Server\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4965,"Name":"actionTrace","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '01';\r\nvar key = '13';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\nSet live tracking every 10 seconds and last for 10 minutes ok.\r\n*/\r\nvar dataSMS = 'CL10s,600s'; // CL(interval),(duration)\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":3,"HasAck":true,"HexString":true,"Order":11,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4964,"Name":"actionRealTimeLocation","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '01';\r\nvar key = '12';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\nGPS Loc!\r\nNow:\r\nLoc Time:07/04/2021 17:36:44\r\nSpeed:0km/h\r\nAltitude:97.0\r\nBattery:57%\r\nwww.google.com/maps?q=22.6537233,114.0006070\r\n*/\r\nvar dataSMS = 'loc';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":10,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4964,\"Name\":\"actionRealTimeLocation\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '01';\\r\\nvar key = '12';\\r\\nvar totalLenght = '0300';\\r\\nvar keyLength = '01';\\r\\nvar messageBody = command + keyLength + key;\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\n/* Answer from the device\\r\\nGPS Loc!\\r\\nNow:\\r\\nLoc Time:07/04/2021 17:36:44\\r\\nSpeed:0km/h\\r\\nAltitude:97.0\\r\\nBattery:57%\\r\\nwww.google.com/maps?q=22.6537233,114.0006070\\r\\n*/\\r\\nvar dataSMS = 'loc';\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":10,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733954911}],"Tags":[]},{"Id":4963,"Name":"setAPN","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local APN':\r\n//var params = {CommunicationSettings:{'SMSGateway':'+34666777888,Esendex','APN':'','APNOld':'','Server':'52.174.17.77,5678','ServerOld':''}}\r\n// AB101B 0066840300 021043802E1635322E3137342E31372E373704406D326D01410142\r\n// AB1015 00 66 84 F5 4B 02 10 43 80 2E 16 35 32 2E 31 37 34 2E 31 37 2E 37 37 04 40 6D 32 6D 01 41 01 42 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) APN and Server and Gateway Number\r\nvar messageBody = '02';\r\n// Server\r\nvar domain = '';\r\nvar port = '';\r\nvar serverLength = '00';\r\n// APN\r\nvar apn = '';\r\nvar apn_password = '';\r\nvar apn_username = '';\r\nvar apnLength = '00';\r\nvar apnUserLength = '00';\r\nvar apnPassLength = '00';\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n domain = serverString[0];\r\n port = serverString[1];\r\n port = changeEndianness(decimalToHex(parseInt(port))).toUpperCase();\r\n // Server IP and Port\r\n domain = ascii_to_hexa(domain).toUpperCase();\r\n serverLength = ('00' + decimalToHex(2 + port.length / 2 + domain.length / 2)).slice(-2).toUpperCase();\r\n // key 43 and TCP and GPRS is 80\r\n messageBody += serverLength + \"4380\" + port + domain;\r\n}\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n // APN\r\n apn = apnString[0];\r\n apn = ascii_to_hexa(apn).toUpperCase();\r\n apnLength = ('00' + decimalToHex(1 + apn.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnLength + \"40\" + apn;\r\n // APN username\r\n apn_username = apnString[1];\r\n apn_username = ascii_to_hexa(apn_username).toUpperCase();\r\n apnUserLength = ('00' + decimalToHex(1 + apn_username.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnUserLength + \"41\" + apn_username;\r\n // APN passwprd\r\n apn_password = apnString[2];\r\n apn_password = ascii_to_hexa(apn_password).toUpperCase();\r\n apnPassLength = ('00' + decimalToHex(1 + apn_password.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnPassLength + \"42\" + apn_password;\r\n // For SMS\r\n dataSMS = `S1,${apnString[0]},${apnString[1]},${apnString[2]}`;\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":true,"Order":0,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4962,"Name":"setEmergencySettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar messageBody = '02';\r\nvar key = '30';\r\nvar phone_number = '00000000000';\r\nvar numberHex = '';\r\nvar sosKeyLength = '00';\r\n//var confFall = '1100'; // Enable, Dial\r\nvar confSOS = '10100000'; // Enable, no SMS, Toggle Call, No Sim Dialing, Contact Number 1\r\nvar dataSMS = '';\r\nif (params.AlertSettings.EmergencyNumber) {\r\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\r\n phone_number = params.AlertSettings.EmergencyNumber;\r\n numberHex = ascii_to_hexa(phone_number).toUpperCase();\r\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n messageBody += sosKeyLength + key + confSOS + numberHex;\r\n dataSMS = `A1,0,1,${phone_number}`;\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLength = changeEndianness(totalLength);\r\n//totalLength = '1000'; //better to calculate it\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":3,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4961,"Name":"setFallSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) Fall sensitivity\r\nvar messageBody = '02';\r\nvar sensitivity = '';\r\nvar dataSMS = '';\r\nvar value = ''\r\nif (params.FallSettings.EnableDisableFallSettings == 'true') {\r\n value += '1'\r\n value += '100' //Dial\r\n //}\r\n if (params.FallSettings.Sensitivity) {\r\n var sensiString = params.FallSettings.Sensitivity.split(',');\r\n var level = sensiString[1];\r\n sensitivity = parseInt(sensiString[0]);\r\n // For SMS\r\n dataSMS = `FL1,${sensitivity},1`;\r\n //numberHex = ascii_to_hexa(sensitivity).toUpperCase();\r\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\r\n value += sensitivity\r\n }\r\n} else {\r\n value = '00000000'\r\n dataSMS = `FL0,1,1`;\r\n}\r\n// create HEADER\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\r\nvar command = '02'\r\nvar keyLength = '02'\r\nvar key = '56'\r\nvar messageBody = command + keyLength + key + value\r\nvar checksum = byteStringToByteArray(messageBody)\r\nchecksum = crc16byte(checksum)\r\nchecksum = decimalToHex(checksum)\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\r\nchecksum = changeEndianness(checksum)\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\r\nvar data = prefix + messageBody\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":4,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4960,"Name":"setGateway","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar messageBody = '02';\r\nvar key = '30';\r\nvar phone_number = '00000000000';\r\nvar numberHex = '';\r\nvar sosKeyLength = '00';\r\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.SMSGateway) {\r\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\r\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\r\n var gateway = gatewayString[1];\r\n gateway_number = gatewayString[0];\r\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\r\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n messageBody += sosKeyLength + key + confSOS + numberHex;\r\n dataSMS = `A10,1,0,${phone_number}`;\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLength = changeEndianness(totalLength);\r\n//totalLength = '1000'; //better to calculate it\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":2,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4960,\"Name\":\"setGateway\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar messageBody = '02';\\r\\nvar key = '30';\\r\\nvar phone_number = '00000000000';\\r\\nvar numberHex = '';\\r\\nvar sosKeyLength = '00';\\r\\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\\r\\nvar dataSMS = '';\\r\\nif (params.CommunicationSettings.SMSGateway) {\\r\\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\\r\\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\\r\\n var gateway = gatewayString[1];\\r\\n gateway_number = gatewayString[0];\\r\\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\\r\\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\\r\\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n messageBody += sosKeyLength + key + confSOS + numberHex;\\r\\n dataSMS = `A10,1,0,${phone_number}`;\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLength = changeEndianness(totalLength);\\r\\n//totalLength = '1000'; //better to calculate it\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733955599},{"Type":1,"NewValue":"{\"Id\":4960,\"Name\":\"setGateway\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar messageBody = '02';\\r\\nvar key = '30';\\r\\nvar gateway_number = '00000000000';\\r\\nvar numberHex = '';\\r\\nvar sosKeyLength = '00';\\r\\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\\r\\nvar dataSMS = '';\\r\\nif (params.CommunicationSettings.SMSGateway) {\\r\\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\\r\\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\\r\\n var gateway = gatewayString[1];\\r\\n gateway_number = gatewayString[0];\\r\\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\\r\\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\\r\\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n messageBody += sosKeyLength + key + confSOS + numberHex;\\r\\n dataSMS = `A10,1,0,${gateway_number}`;\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLength = changeEndianness(totalLength);\\r\\n//totalLength = '1000'; //better to calculate it\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734622575},{"Type":1,"NewValue":"{\"Id\":4960,\"Name\":\"setGateway\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar messageBody = '02';\\r\\nvar key = '30';\\r\\nvar gateway_number = '00000000000';\\r\\nvar numberHex = '';\\r\\nvar sosKeyLength = '00';\\r\\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\\r\\nvar dataSMS = '';\\r\\nif (params.CommunicationSettings.SMSGateway) {\\r\\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\\r\\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\\r\\n var gateway = gatewayString[1];\\r\\n gateway_number = gatewayString[0];\\r\\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\\r\\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\\r\\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n messageBody += sosKeyLength + key + confSOS + numberHex;\\r\\n dataSMS = `A10,0,0,${gateway_number}`; // doesn't accept SMS+ Untogle Call\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLength = changeEndianness(totalLength);\\r\\n//totalLength = '1000'; //better to calculate it\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734632777}],"Tags":[]},{"Id":4959,"Name":"setServer","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local APN':\r\n//var params = {CommunicationSettings:{'SMSGateway':'+34666777888,Esendex','APN':'','APNOld':'','Server':'52.174.17.77,5678','ServerOld':''}}\r\n// AB101B 0066840300 021043802E1635322E3137342E31372E373704406D326D01410142\r\n// AB1015 00 66 84 F5 4B 02 10 43 80 2E 16 35 32 2E 31 37 34 2E 31 37 2E 37 37 04 40 6D 32 6D 01 41 01 42 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) APN and Server and Gateway Number\r\nvar messageBody = '02';\r\n// Server\r\nvar domain = '';\r\nvar port = '';\r\nvar serverLength = '00';\r\n// APN\r\nvar apn = '';\r\nvar apn_password = '';\r\nvar apn_username = '';\r\nvar apnLength = '00';\r\nvar apnUserLength = '00';\r\nvar apnPassLength = '00';\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n domain = serverString[0];\r\n port = serverString[1];\r\n port = changeEndianness(decimalToHex(parseInt(port))).toUpperCase();\r\n // Server IP and Port\r\n domain = ascii_to_hexa(domain).toUpperCase();\r\n serverLength = ('00' + decimalToHex(2 + port.length / 2 + domain.length / 2)).slice(-2).toUpperCase();\r\n // key 43 and TCP and GPRS is 80\r\n messageBody += serverLength + \"4380\" + port + domain;\r\n // For SMS\r\n dataSMS = `IP1,${serverString[0]},${serverString[1]}`;\r\n}\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n // APN\r\n apn = apnString[0];\r\n apn = ascii_to_hexa(apn).toUpperCase();\r\n apnLength = ('00' + decimalToHex(1 + apn.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnLength + \"40\" + apn;\r\n // APN username\r\n apn_username = apnString[1];\r\n apn_username = ascii_to_hexa(apn_username).toUpperCase();\r\n apnUserLength = ('00' + decimalToHex(1 + apn_username.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnUserLength + \"41\" + apn_username;\r\n // APN passwprd\r\n apn_password = apnString[2];\r\n apn_password = ascii_to_hexa(apn_password).toUpperCase();\r\n apnPassLength = ('00' + decimalToHex(1 + apn_password.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnPassLength + \"42\" + apn_password;\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":true,"Order":1,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4958,"Name":"getCurrentSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '214A1A3440414243567356101F4453473330';\r\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\n//var keyLength = '10'; // previous\r\nvar keyLength = '13';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":17,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4957,"Name":"getFirmwareVersion","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar value = '1A'; //Ask for firmware Long\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'V?';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":16,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4956,"Name":"getCurrentSettings3","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'BCQ1'; // Check Beacon List\r\n/* 1,F7:37:B7:10:81:CE,office1\r\n2,C4:9F:A6:15:24:3F,office2\r\n3,D3:E3:AC:86:5E:46,office7 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"HasAck":true,"HexString":true,"Order":19,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4956,\"Name\":\"getCurrentSettings3\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar dataSMS = 'BCQ1'; // Check Beacon List\\r\\n/* 1,F7:37:B7:10:81:CE,office1\\r\\n2,C4:9F:A6:15:24:3F,office2\\r\\n3,D3:E3:AC:86:5E:46,office7 */\\r\\nvar data = ''; // empty\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar notSend = false;\\r\\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\\r\\n notSend = true;\\r\\n}\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS,\\r\\n notSend: notSend\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":{\"Id\":4958,\"Protocol\":{\"Id\":224,\"Code\":\"Access TEC Roam\",\"Version\":\"0.2\",\"FirmwareVersion\":\"V04b.8601.2411.1.0.16.4411.2409.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"getCurrentSettings\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar value = '214A1A3440414243567356101F4453473330';\\r\\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n//var keyLength = '10'; // previous\\r\\nvar keyLength = '13';\\r\\nvar key = 'F0';\\r\\nvar messageBody = command + keyLength + key + value;\\r\\nvar dataSMS = 'V?'; // Get Firmware\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":17},\"AvoidResending\":false,\"FollowParentSentType\":true,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":19,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733390414}],"Tags":[]},{"Id":4955,"Name":"getCurrentSettings4","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'A?'; // Check Contact List\r\n/* A1: 1,1,15899795842\r\nA2: 1,0,13632770106\r\nA3: 0,1,15986236978 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"HasAck":true,"HexString":true,"Order":20,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4955,\"Name\":\"getCurrentSettings4\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar dataSMS = 'A?'; // Check Contact List\\r\\n/* A1: 1,1,15899795842\\r\\nA2: 1,0,13632770106\\r\\nA3: 0,1,15986236978 */\\r\\nvar data = ''; // empty\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar notSend = false;\\r\\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\\r\\n notSend = true;\\r\\n}\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS,\\r\\n notSend: notSend\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":{\"Id\":4958,\"Protocol\":{\"Id\":224,\"Code\":\"Access TEC Roam\",\"Version\":\"0.2\",\"FirmwareVersion\":\"V04b.8601.2411.1.0.16.4411.2409.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"getCurrentSettings\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar value = '214A1A3440414243567356101F4453473330';\\r\\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n//var keyLength = '10'; // previous\\r\\nvar keyLength = '13';\\r\\nvar key = 'F0';\\r\\nvar messageBody = command + keyLength + key + value;\\r\\nvar dataSMS = 'V?'; // Get Firmware\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":17},\"AvoidResending\":false,\"FollowParentSentType\":true,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":20,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733390446}],"Tags":[]},{"Id":4954,"Name":"getCurrentSettings5","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'GPRS?'; // Check Server Details\r\n/*GRPS: ON\r\nAPN: internet\r\nUsername:\r\nPassword:\r\nIP: 1, www.smart-locator.com\r\nPort: 6060\r\nMove report time: 30 minutes\r\nNo move report time: 60 minutes\r\nHB: on, 20 minutes */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"HasAck":true,"HexString":true,"Order":21,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4954,\"Name\":\"getCurrentSettings5\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar dataSMS = 'GPRS?'; // Check Server Details\\r\\n/*GRPS: ON\\r\\nAPN: internet\\r\\nUsername:\\r\\nPassword:\\r\\nIP: 1, www.smart-locator.com\\r\\nPort: 6060\\r\\nMove report time: 30 minutes\\r\\nNo move report time: 60 minutes\\r\\nHB: on, 20 minutes */\\r\\nvar data = ''; // empty\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar notSend = false;\\r\\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\\r\\n notSend = true;\\r\\n}\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS,\\r\\n notSend: notSend\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":{\"Id\":4958,\"Protocol\":{\"Id\":224,\"Code\":\"Access TEC Roam\",\"Version\":\"0.2\",\"FirmwareVersion\":\"V04b.8601.2411.1.0.16.4411.2409.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"getCurrentSettings\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar value = '214A1A3440414243567356101F4453473330';\\r\\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n//var keyLength = '10'; // previous\\r\\nvar keyLength = '13';\\r\\nvar key = 'F0';\\r\\nvar messageBody = command + keyLength + key + value;\\r\\nvar dataSMS = 'V?'; // Get Firmware\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":17},\"AvoidResending\":false,\"FollowParentSentType\":true,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":21,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733390475}],"Tags":[]},{"Id":4953,"Name":"setMotionAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.MovementAlert.EnableDisableMotionAlert == 'true') {\n value += '1';\n if (params.MovementAlert.Dial == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n if (params.MovementAlert.Time) {\n var time = ('00000000000000' + decimalToBinary(parseInt(params.MovementAlert.Time))).slice(-14);\n value += time;\n }\n if (params.MovementAlert.Cooldown) {\n var time = ('0000000000000000' + decimalToBinary(parseInt(params.MovementAlert.Cooldown))).slice(-16);\n value += time;\n //console.log(value);\n }\n} else {\n value = '0';\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\nvalue = changeEndianness(value);\n//value = value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '52';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = changeEndianness(checksum);\n//checksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x !== 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin;\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa;\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4952,"Name":"setSpeedDialSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.SpeedDial.EnableDisableSpeedDial == 'true') {\n value += '10'; //Enable\n value += '0'; //Long Press\n /*if (params.SpeedDialButtonSettings.TriggerMode == '0') {\n value += '0';\n } else {\n value += '1';\n }*/\n value += '0010'; //Auth2 number\n var time = 20;\n value += ('0000000' + decimalToBinary(parseInt(time))).slice(-7);\n value += '11'; //feedback vibrate and voice\n /*if (params.SpeedDialButtonSettings.Feedback) {\n value += params.SpeedDialButtonSettings.Feedback;\n } else {\n value += '00';\n }*/\n} else {\n value = '0000000000000000';\n}\nvalue = ('0000' + binaryToHex(value)).slice(-4).toUpperCase();\nvalue = value.substring(2, 4) + value.substring(0, 2);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '03';\nvar key = '21';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0500' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4951,"Name":"setSystemLanguage","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\n//create the bit table to use with control\r\nvar value = '';\r\nif (params.SystemSettings.SystemLanguage) {\r\n var language = params.SystemSettings.SystemLanguage;\r\n var languageHex = ascii_to_hexa(language).toUpperCase();\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = ('0' + decimalToHex(1 + (languageHex.length / 2))).slice(-2).toUpperCase();\r\nvar key = '1F'; //system language\r\nvar messageBody = command + keyLength + key + languageHex;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar totalLength = '0500';\r\nif (languageHex.length == 10) {\r\n totalLength = '0800';\r\n}\r\nif (languageHex.length == 12) {\r\n totalLength = '0900';\r\n}\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin;\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa;\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4950,"Name":"setNoMotionAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.NonMovementSettings.EnableDisableNonMovementSettings == 'true') {\n value += '1';\n //if (params.NonMovementAlert.Dial == 'true') {\n // value += '1'\n //} else {\n value += '1'; // Dial by default\n //}\n if (params.NonMovementSettings.Time) {\n var time = ('000000000000000000000000000000' + decimalToBinary(params.NonMovementSettings.Time)).slice(-30);\n //var time = ('000000000000000000000000000000' + decimalToBinary(121)).slice(-30)\n value += time;\n }\n} else {\n value = '0';\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase()\nvalue = value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2)\n//value = '2C010080'\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '05'\nvar key = '53'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4949,"Name":"setOverSpeedAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = ''\nif (params.OverSpeedAlert.EnableDisableOverSpeedAlert == 'true') {\n value += '1'\n if (params.OverSpeedAlert.Speed) {\n var angle = ('000000000000000' + decimalToBinary(parseInt(params.OverSpeedAlert.Speed))).slice(-15)\n value += angle\n }\n} else {\n value = '0'\n}\nvalue = ('0000' + binaryToHex(value)).slice(-4).toUpperCase()\nvalue = changeEndianness(value)\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '03'\nvar key = '54'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = changeEndianness(checksum.toString())\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0500' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4948,"Name":"setHomeBeacon","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n// BeaconName\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar dataSMS = '';\r\n//create the bit table to use with control\r\nvar value = '';\r\nvar beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\n// always enable\r\nvalue += '1'; //Enable\r\nvalue += '0000000'; // Beacon 1\r\n/*if (params.SetBeacon1.EnableDisableBeacon1 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000000'; // Beacon 1\r\n //Beacon 1\r\n} else {\r\n value = '00000000';\r\n}*/\r\n// name, mac, major, minor\r\nif (params.HomeBeacon.BeaconName) {\r\n beaconString = params.HomeBeacon.BeaconName.split(',');\r\n var beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, ''));\r\n var beacon_mac = beaconString[1].replace(/:/g, '');\r\n beacon_mac = changeEndianness(beacon_mac);\r\n var beacon_major = beaconString[2];\r\n var beacon_minor = beaconString[3];\r\n dataSMS = `BSC0.0,0.0,${beaconString[1]},${beaconString[0].replace(/\\s+/g, '')}`;\r\n}\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = ('00' + decimalToHex(16 + (beacon_name.length / 2))).slice(-2).toUpperCase();\r\nvar key = '73';\r\nvar suffix = '0000000000000000'; // lat and long. not needed\r\nvar messageBody = command + keyLength + key + value + beacon_mac + suffix + beacon_name;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar totalLenght = ('0000' + decimalToHex(18 + (beacon_name.length / 2))).slice(-4).toUpperCase();\r\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin;\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa;\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":7,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4947,"Name":"setSMSGatewayNumber","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar numberHex = '';\r\nvar numberLength = '00';\r\nvar gateway_number = '00000000000';\r\nvar nameHex = ascii_to_hexa('No Esendex').toUpperCase();\r\nvar value = '';\r\nif (params.CommunicationSettings.SMSGateway) {\r\n value += '110'; // Enable + accept SMS+ Untogle Call\r\n //Authorised number 10\r\n value += '01001'; // No SIM Dialing + Contact Number 10\r\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\r\n var gateway = gatewayString[1];\r\n gateway_number = gatewayString[0];\r\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\r\n numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\r\n nameHex = ascii_to_hexa(gateway).toUpperCase();\r\n} else {\r\n value += '000'; // Disable + not accept SMS +Untogle Call\r\n value += '01001';\r\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\r\n numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\r\n}\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar key = '34';\r\nvar keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\nvar nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\nvar messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\nvar totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":3,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4946,"Name":"setCustom ID","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar key = '47';\nif (params.CustomID.CustomID == 'true') {\n var keyLength = '02';\n var customID = '06';\n var totalLenght = '0400';\n} else {\n var keyLength = '01';\n var customID = '';\n var totalLenght = '0300';\n}\nvar messageBody = command + keyLength + key + customID;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\nvar data = prefix + messageBody;\n// For GPRS command\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":5,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4945,"Name":"setHeartRateDetectingInterval","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nif (params.HeartRateMonitor.HeartRateDetectingInterval) {\n var heartBeat = parseInt(params.HeartRateMonitor.HeartRateDetectingInterval) * 60;\n heartBeat = decimalToHex(heartBeat);\n heartBeat = ('000000' + heartBeat).slice(-6).toUpperCase();\n if (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true') {\n heartBeat = '80' + heartBeat;\n } //enable\n else {\n heartBeat = '00' + heartBeat;\n } //disable\n heartBeat = heartBeat.substring(6, 8) + heartBeat.substring(4, 6) + heartBeat.substring(2, 4) + heartBeat.substring(0, 2);\n} else {\n var heartBeat = '58 02 00 00'\n} // disable and 600 seconds\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '46';\nvar totalLenght = '0700';\nvar messageBody = command + keyLength + key + heartBeat;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4944,"Name":"setVoicePrompt","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\n//create the bit table to use with control\r\nvar value = '';\r\nif (params.VoicePrompt.Beep == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.TiltCancel == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Charging == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Battery == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call1 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call2 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call3 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call4 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call5 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Fall == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.SOS == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Click == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.NoMotion == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Motion == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Tilt == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Activity == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Find == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call6 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.AlarmCancel == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Time == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nvalue += '0'; // not defined bit 20\r\nif (params.VoicePrompt.CallError == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.CallDisconnected == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.CallHang == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call7 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call8 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call9 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call10 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.AlarmComplete == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.BLE == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.BaseLocation == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nvalue += '0'; // not defined bit 31\r\nvalue = reverseString(value);\r\n\r\nfunction reverseString(str) {\r\n var newString = \"\";\r\n for (var i = str.length - 1; i >= 0; i--) {\r\n newString += str[i];\r\n }\r\n return newString;\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '19';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4943,"Name":"setCycle","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.CycleInterval.HeartbeatInterval) {\n var heartBeat = parseInt(params.CycleInterval.HeartbeatInterval) * 60;\n heartBeat = decimalToHex(heartBeat);\n heartBeat = ('000000' + heartBeat).slice(-6).toUpperCase();\n heartBeat = '80' + heartBeat;\n heartBeat = heartBeat.substring(6, 8) + heartBeat.substring(4, 6) + heartBeat.substring(2, 4) + heartBeat.substring(0, 2);\n}\nif (params.CycleInterval.CycleInterval) {\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\n cycleInterval = decimalToHex(cycleInterval);\n cycleInterval = ('00000000' + cycleInterval).slice(-8).toUpperCase();\n cycleInterval = cycleInterval.substring(6, 8) + cycleInterval.substring(4, 6) + cycleInterval.substring(2, 4) + cycleInterval.substring(0, 2);\n}\nif (params.CycleInterval.LazyCycleInterval) {\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\n lazyCycleInterval = decimalToHex(lazyCycleInterval);\n lazyCycleInterval = ('00000000' + lazyCycleInterval).slice(-8).toUpperCase();\n lazyCycleInterval = lazyCycleInterval.substring(6, 8) + lazyCycleInterval.substring(4, 6) + lazyCycleInterval.substring(2, 4) + lazyCycleInterval.substring(0, 2);\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '0D';\nvar key = '44';\nvar messageBody = command + keyLength + key + heartBeat + cycleInterval + lazyCycleInterval;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0F00' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4942,"Name":"setAlarmClock2","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.AlarmClock2.EnableDisableAlarmClock2 == 'true') {\n var index = '81'\n if (params.AlarmClock2.Time) {\n var hour = params.AlarmClock2.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2)\n hour = parseInt(hour)\n hour = decimalToHex(hour)\n hour = ('00' + hour).slice(-2).toUpperCase()\n var min = params.AlarmClock2.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4)\n min = parseInt(min)\n min = decimalToHex(min)\n min = ('00' + min).slice(-2).toUpperCase()\n } else {\n var hour = '0C'; // default time 12:00\n var min = '00';\n }\n //create the bit table to use with workdays\n var workday = 0\n if (params.AlarmClock2.Monday == 'true') {\n workday += 1\n }\n if (params.AlarmClock2.Tuesday == 'true') {\n workday += 2\n }\n if (params.AlarmClock2.Wednesday == 'true') {\n workday += 4\n }\n if (params.AlarmClock2.Thursday == 'true') {\n workday += 8\n }\n if (params.AlarmClock2.Friday == 'true') {\n workday += 16\n }\n if (params.AlarmClock2.Saturday == 'true') {\n workday += 32\n }\n if (params.AlarmClock2.Sunday == 'true') {\n workday += 64\n }\n workday = decimalToHex(workday).toUpperCase()\n workday = ('00' + workday).slice(-2).toUpperCase()\n if (params.AlarmClock2.Duration) {\n var duration = params.AlarmClock2.Duration\n duration = decimalToHex(parseInt(duration)).toUpperCase()\n duration = ('00' + duration).slice(-2).toUpperCase()\n } else {\n var duration = '1E';\n }\n var ring = '01'\n var value = index + hour + min + workday + duration + ring\n} else {\n value = '010000000101'\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '07'\nvar key = '0B'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar prefix = 'AB10' + '0900' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4941,"Name":"setVoicePromptVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.SystemSettings.Volume) {\n var volume = parseInt(params.SystemSettings.Volume)\n volume = decimalToHex(volume)\n volume = ('00' + volume).slice(-2).toUpperCase()\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '02'\nvar key = '1C'\nvar messageBody = command + keyLength + key + volume\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum).toUpperCase()\nchecksum = ('0000' + checksum).slice(-4)\nchecksum = changeEndianness(checksum)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4939,"Name":"setEnableControl","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.EnableControl.LED == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.Beep == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.Vibration == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.CellTowerLocating == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.WiFi == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.SOSCallSpeaker == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.SideCallSpeaker == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.BLEStayConnected == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.BLELocating == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.SOSCallVoice == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.BLEAlwaysON == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.GPSLocate == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.AlertTCPFast == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nvalue += '0'; //watch only girar muñeca para iluminar pantalla\nif (params.EnableControl.Beacon == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nvalue += '0'; // activity fuction, \n//step counting, \nif (params.EnableControl.Step == 'true') {\n value += '1';\n} else {\n value += '0';\n}\n//home-wifi location, data-saver, NLprovider, power control,\n// sos cancel switch, Long SMS, plus 7 more without functions\nvalue += '0000';\nif (params.EnableControl.StopCallSequence == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nvalue += '00000000';\nif (params.EnableControl.AutoUpdate == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.AGPS == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nvalue = reverseString(value);\n\nfunction reverseString(str) {\n var newString = \"\";\n for (var i = str.length - 1; i >= 0; i--) {\n newString += str[i];\n }\n return newString;\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\nvalue = changeEndianness(value);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '0F';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = changeEndianness(checksum);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4938,"Name":"setSOSButtonSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\n value += '10';\n if (params.SOSButtonSettings.TriggerMode == '0') {\n value += '0';\n } else {\n value += '1';\n }\n /*\n if (params.SOSButtonSettings.CallTo == '0'){\n value += '0001'\n }else { \n value += '0000'\n }\n */\n value += '1111'; //SOS task (Default) Standard\n var time = 20;\n value += ('0000000' + decimalToBinary(parseInt(time))).slice(-7);\n if (params.SOSButtonSettings.Feedback) {\n value += params.SOSButtonSettings.Feedback;\n } else {\n value += '00';\n }\n} else {\n value = '0000000000000000';\n}\nvalue = ('0000' + binaryToHex(value)).slice(-4).toUpperCase();\nvalue = value.substring(2, 4) + value.substring(0, 2);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '03';\nvar key = '20';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0500' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x !== 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin;\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4937,"Name":"setExtraEnableControl","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = '';\r\n// Wifi loc name EV07, beacon leaves home alert, beacon V2, BLE scan switch,\r\n// XXX, no motion alert data only EV05, power saving EV06, Stop alert call sequence.\r\nvalue += '0000000';\r\nif (params.EnableControl.StopCallSequence == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nvalue = reverseString(value);\r\n\r\nfunction reverseString(str) {\r\n var newString = \"\";\r\n for (var i = str.length - 1; i >= 0; i--) {\r\n newString += str[i];\r\n }\r\n return newString;\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '75';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//How to calculate sequenceID\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4936,"Name":"setAlarmClock4","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.AlarmClock4.EnableDisableAlarmClock4 == 'true') {\n var index = '83'\n if (params.AlarmClock4.Time) {\n var hour = params.AlarmClock4.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2)\n hour = parseInt(hour)\n hour = decimalToHex(hour)\n hour = ('00' + hour).slice(-2).toUpperCase()\n var min = params.AlarmClock4.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4)\n min = parseInt(min)\n min = decimalToHex(min)\n min = ('00' + min).slice(-2).toUpperCase()\n } else {\n var hour = '0C'; // default time 12:00\n var min = '00';\n }\n //create the bit table to use with workdays\n var workday = 0\n if (params.AlarmClock4.Monday == 'true') {\n workday += 1\n }\n if (params.AlarmClock4.Tuesday == 'true') {\n workday += 2\n }\n if (params.AlarmClock4.Wednesday == 'true') {\n workday += 4\n }\n if (params.AlarmClock4.Thursday == 'true') {\n workday += 8\n }\n if (params.AlarmClock4.Friday == 'true') {\n workday += 16\n }\n if (params.AlarmClock4.Saturday == 'true') {\n workday += 32\n }\n if (params.AlarmClock4.Sunday == 'true') {\n workday += 64\n }\n workday = decimalToHex(workday).toUpperCase()\n workday = ('00' + workday).slice(-2).toUpperCase()\n if (params.AlarmClock4.Duration) {\n var duration = params.AlarmClock4.Duration\n duration = decimalToHex(parseInt(duration)).toUpperCase()\n duration = ('00' + duration).slice(-2).toUpperCase()\n } else {\n var duration = '1E';\n }\n var ring = '01'\n var value = index + hour + min + workday + duration + ring\n} else {\n value = '030000000101'\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '07'\nvar key = '0B'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar prefix = 'AB10' + '0900' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4935,"Name":"setOystaNumber","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = ''\nvalue += '1'\nvalue += '010'\n//Authorised number 10\nvalue += '1001'\nvar number = '+447781482635'\nvar numberHex = ascii_to_hexa(number).toUpperCase()\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase()\nvar key = '30'\nvar messageBody = command + keyLength + key + value + numberHex\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4934,"Name":"setStepCollectSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nif (params.StepCounting.StepCountingInterval) {\n var heartBeat = parseInt(params.StepCounting.StepCountingInterval) * 60;\n heartBeat = decimalToHex(heartBeat);\n heartBeat = ('000000' + heartBeat).slice(-6).toUpperCase();\n if (params.StepCounting.EnableDisableStepCounting == 'true') {\n heartBeat = '80' + heartBeat;\n } //enable\n else {\n heartBeat = '00' + heartBeat;\n } //disable\n heartBeat = heartBeat.substring(6, 8) + heartBeat.substring(4, 6) + heartBeat.substring(2, 4) + heartBeat.substring(0, 2);\n} else {\n var heartBeat = '58 02 00 00';\n} // disable and 600 seconds\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '5B';\nvar totalLength = '0700';\nvar messageBody = command + keyLength + key + heartBeat;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4933,"Name":"setSMSPassword","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar password = '00000000';\r\nif (params.SMSPassword.EnableDisableSMSPassword == 'true') {\r\n if (params.SMSPassword.SMSPassword) {\r\n password = parseInt(params.SMSPassword.SMSPassword);\r\n password = decimalToHex(password);\r\n password = ('000000' + password).slice(-6).toUpperCase();\r\n password = changeEndianness(password) + '80';\r\n }\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '0D';\r\nvar messageBody = command + keyLength + key + password;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = changeEndianness(checksum);\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4932,"Name":"setFallDownAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = ''\r\nif (params.FallSettings.EnableDisableFallSettings == 'true') {\r\n value += '1'\r\n //if (params.FallAlarm.Dial == 'true') {\r\n // value += '100'\r\n //} else {\r\n value += '000'\r\n //}\r\n if (params.FallSettings.Sensitivity) {\r\n var sensitivity = parseInt(params.FallSettings.Sensitivity)\r\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\r\n value += sensitivity\r\n }\r\n} else {\r\n value = '00000000'\r\n}\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\r\nvar command = '02'\r\nvar keyLength = '02'\r\nvar key = '56'\r\nvar messageBody = command + keyLength + key + value\r\nvar checksum = byteStringToByteArray(messageBody)\r\nchecksum = crc16byte(checksum)\r\nchecksum = decimalToHex(checksum)\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\r\nchecksum = changeEndianness(checksum)\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\r\nvar data = prefix + messageBody\r\n//var data = 'AB100400 7CEE0200020256C1';\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4931,"Name":"setSOSOption","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar talkTime = 65534\ntalkTime = decimalToHex(talkTime)\ntalkTime = ('0000' + talkTime).slice(-4).toUpperCase()\ntalkTime = changeEndianness(talkTime)\nif (params.SOSButtonSettings.RingTime) {\n var ringTime = params.SOSButtonSettings.RingTime\n ringTime = parseInt(ringTime)\n ringTime = decimalToHex(ringTime)\n ringTime = ('00' + ringTime).slice(-2).toUpperCase()\n} else {\n var ringTime = 20;\n ringTime = decimalToHex(ringTime);\n ringTime = ('00' + ringTime).slice(-2).toUpperCase();\n}\nif (params.SOSButtonSettings.Retries) {\n var tries = params.SOSButtonSettings.Retries\n tries = parseInt(tries)\n tries = decimalToHex(tries)\n tries = ('00' + tries).slice(-2).toUpperCase()\n} else {\n var tries = '01';\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '05'\nvar key = '32'\nvar messageBody = command + keyLength + key + talkTime + ringTime + tries\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum).toUpperCase()\nchecksum = ('0000' + checksum).slice(-4)\nchecksum = changeEndianness(checksum)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4930,"Name":"setAlarmClock3","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.AlarmClock3.EnableDisableAlarmClock3 == 'true') {\n var index = '82'\n if (params.AlarmClock3.Time) {\n var hour = params.AlarmClock3.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2)\n hour = parseInt(hour)\n hour = decimalToHex(hour)\n hour = ('00' + hour).slice(-2).toUpperCase()\n var min = params.AlarmClock3.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4)\n min = parseInt(min)\n min = decimalToHex(min)\n min = ('00' + min).slice(-2).toUpperCase()\n } else {\n var hour = '0C'; // default time 12:00\n var min = '00';\n }\n //create the bit table to use with workdays\n var workday = 0\n if (params.AlarmClock3.Monday == 'true') {\n workday += 1\n }\n if (params.AlarmClock3.Tuesday == 'true') {\n workday += 2\n }\n if (params.AlarmClock3.Wednesday == 'true') {\n workday += 4\n }\n if (params.AlarmClock3.Thursday == 'true') {\n workday += 8\n }\n if (params.AlarmClock3.Friday == 'true') {\n workday += 16\n }\n if (params.AlarmClock3.Saturday == 'true') {\n workday += 32\n }\n if (params.AlarmClock3.Sunday == 'true') {\n workday += 64\n }\n workday = decimalToHex(workday).toUpperCase()\n workday = ('00' + workday).slice(-2).toUpperCase()\n if (params.AlarmClock3.Duration) {\n var duration = params.AlarmClock3.Duration\n duration = decimalToHex(parseInt(duration)).toUpperCase()\n duration = ('00' + duration).slice(-2).toUpperCase()\n } else {\n var duration = '1E';\n }\n var ring = '01'\n var value = index + hour + min + workday + duration + ring\n} else {\n value = '020000000101'\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '07'\nvar key = '0B'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar prefix = 'AB10' + '0900' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4929,"Name":"setSpeedDialNumber","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar numberHex = '';\r\nvar value = '';\r\n// For Roam\r\nif (params.SpeedDial.EnableDisableSpeedDial == 'true') {\r\n value += '10'; // Enable + Not accept SMS\r\n} else {\r\n value += '00'; // Disable + not accept SMS\r\n}\r\nvalue += '0'; // Untogle Call\r\nif (params.SpeedDial.SpeedDialNumber) {\r\n value += '00001'; // No SIM Dialing + Contact Number 2\r\n // es posible que tengamos que definir un valor por defecto para el numero\r\n var number = params.SpeedDial.SpeedDialNumber;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00001';\r\n}\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\nvar key = '30';\r\nvar messageBody = command + keyLength + key + value + numberHex;\r\nvar totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction fillHex(x, y) {\r\n if (x % 2 == 0) {\r\n return y\r\n } else {\r\n return y + '00'\r\n }\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4928,"Name":"setPowerAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.PowerAlert.EnableDisablePowerAlert == 'true') {\n if (params.PowerAlert.PowerOff == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n if (params.PowerAlert.PowerOn == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n if (params.PowerAlert.PowerLow == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n value += '0';\n value += '000000000000';\n value += '00000000';\n if (params.PowerAlert.LowPowerThreshold) {\n var threshold = ('00000000' + decimalToBinary(params.PowerAlert.LowPowerThreshold)).slice(-8);\n value += threshold;\n } else {\n value += '00001111';\n }\n} else {\n value = '00000000000000000000000000000000';\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\nvalue = value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '50';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x !== 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin;\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4927,"Name":"setSOSNumber","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar numberHex = '';\r\nvar numberLength = '00';\r\nvar phone_number = '00000000000';\r\nvar nameHex = ascii_to_hexa('SOS').toUpperCase();\r\nvar urlHex = ascii_to_hexa('https://test.myoysta.com/pearl_button_Non_Vector.jpeg').toUpperCase();\r\nvar urlLength = '35';\r\nvar value = '';\r\n// For Rio\r\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\r\n value += '10'; // Enable + Not accept SMS\r\n} else {\r\n value += '00';\r\n} // Disable + not accept SMS\r\nif (params.SOSButtonSettings.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.SOSButtonSettings.Number) {\r\n value += '00000'; // No SIM Dialing + Contact Number 1\r\n phone_number = params.SOSButtonSettings.Number;\r\n numberHex = ascii_to_hexa(phone_number).toUpperCase();\r\n numberLength = ('00' + decimalToHex(phone_number.length)).slice(-2).toUpperCase();\r\n} else {\r\n value += '00000';\r\n numberHex = ascii_to_hexa(phone_number).toUpperCase();\r\n numberLength = ('00' + decimalToHex(phone_number.length)).slice(-2).toUpperCase();\r\n}\r\n// photo URL\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar key = '34';\r\nvar keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\nvar nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\nvar messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + urlLength + urlHex; // no photo\r\nvar totalLenght = ('0000' + decimalToHex(7 + (urlHex.length / 2) + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin;\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa;\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4926,"Name":"actionInitializeMileage","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar value = '00000000';\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '09';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar totalLenght = '0007';\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\nvar data = prefix + messageBody;\n//var data = 'AB1007009E8B' + sequenceID + '02050900000000'\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}\n/*var configs = [];\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar data = 'AB1007009E8B' + sequenceID + '02050900000000'\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}*/","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4925,"Name":"setContinuousLocate","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.ContinuousLocate.Interval) {\n var Interval = parseInt(params.ContinuousLocate.Interval) * 60;\n Interval = decimalToHex(Interval);\n Interval = ('0000' + Interval).slice(-4).toUpperCase();\n Interval = Interval.substring(2, 4) + Interval.substring(0, 2);\n}\nif (params.ContinuousLocate.Duration) {\n var Duration = parseInt(params.ContinuousLocate.Duration) * 60;\n Duration = decimalToHex(Duration);\n Duration = ('0000' + Duration).slice(-4).toUpperCase();\n Duration = Duration.substring(2, 4) + Duration.substring(0, 2);\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '45';\nvar messageBody = command + keyLength + key + Interval + Duration;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4924,"Name":"setAuthorisedNumbers","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"//updated v 2\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local Contact':\r\n//AB104F008CF27D3D020E34A0013108436F6E7461637431000E34A1013208436F6E746163743200053402000000053403000000053404000000053405000000053406000000053407000000053408000000053409000000\r\n//var params = {'ApprovedContacts': {'Contact': [{'Number':'1','Name':'Contact1'},{'Number':'2','Name':'Contact2'} ]}};\r\nvar configs = [];\r\nvar idsToUpdate = []\r\nvar deletedId = []\r\nvar notSend = false;\r\nvar numberLength = '00';\r\nvar numberHex = '';\r\nvar nameLength = '00';\r\nvar blankName = '';\r\nvar value = '02';\r\nvar keyLength = '00';\r\nvar confTel = '';\r\nvar count = 2; // approved contact will be from A3 to A9 - index 2 to index 8\r\n//check if a number was deleted, and remove it from the list\r\nlet counter = 0;\r\nfor (var contactChanged of paramsChanged.ApprovedContacts) {\r\n // update ids\r\n var contacts = paramsChangedIds.ApprovedContacts[counter];\r\n for (var item in contacts) {\r\n idsToUpdate.push(contacts[item]);\r\n }\r\n if (contactChanged.Deleted === \"true\") {\r\n //var cvpair1 = {code: p1,value: p2};\r\n deletedId.push(contactChanged);\r\n }\r\n counter++;\r\n}\r\n//iterate over approved contacts, \r\nfor (var contact in params.ApprovedContacts) {\r\n confTel = (binaryToHex(1000)).slice(-1).toUpperCase(); // Enable + Not accept SMS + No Accept Call + No SIM Dialing\r\n if (deletedId.length > 0) {\r\n if (checkValue(contact) === true) {\r\n confTel = ('00' + decimalToHex(count)).slice(-2).toUpperCase(); // Add contact\r\n value += \"0530\" + confTel + '000000'; //no number, no name, no photo\r\n } else {\r\n confTel = confTel + ('00' + decimalToHex(parseInt(count))).slice(-1).toUpperCase(); // Add contact from count to avoid rewrite SOS number and Dial number\r\n numberHex = ascii_to_hexa(params.ApprovedContacts[contact].Contact).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(params.ApprovedContacts[contact].Contact.length)).slice(-2).toUpperCase();\r\n keyLength = ('00' + decimalToHex(2 + params.ApprovedContacts[contact].Contact.length)).slice(-2).toUpperCase();\r\n //value += keyLength + \"30\" + confTel + numberLength + numberHex; //no photo\r\n value += keyLength + \"30\" + confTel + numberHex; //no photo \r\n }\r\n } else {\r\n confTel = confTel + ('00' + decimalToHex(parseInt(count))).slice(-1).toUpperCase(); // Add contact from count to avoid rewrite SOS number and Dial number\r\n numberHex = ascii_to_hexa(params.ApprovedContacts[contact].Contact).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(params.ApprovedContacts[contact].Contact.length)).slice(-2).toUpperCase();\r\n keyLength = ('00' + decimalToHex(2 + params.ApprovedContacts[contact].Contact.length)).slice(-2).toUpperCase();\r\n //value += keyLength + \"30\" + confTel + numberLength + numberHex; //no photo\r\n value += keyLength + \"30\" + confTel + numberHex; //no photo\r\n }\r\n count++;\r\n}\r\n//and disable other contacts\r\nfor (var i = count; i < 9; i++) {\r\n confTel = ('00' + decimalToHex(parseInt(i))).slice(-2).toUpperCase(); // Add contact\r\n value += \"0530\" + confTel + '000000'; //no number, no name, no photo\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(value.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(value);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + value;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n idsToUpdate: idsToUpdate,\r\n notSend: notSend\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 checkValue(contact) {\r\n for (var d in deletedId) {\r\n //if (d === contact) {\r\n // return true;\r\n //}\r\n if (params.ApprovedContacts[contact].Contact == paramsChanged.ApprovedContacts[d].Contact) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":8,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4923,"Name":"setMicVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.MicVolume.Volume) {\n var volume = parseInt(params.MicVolume.Volume)\n volume = decimalToHex(volume)\n volume = ('00' + volume).slice(-2).toUpperCase()\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '02'\nvar key = '11'\nvar messageBody = command + keyLength + key + volume\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum).toUpperCase()\nchecksum = ('0000' + checksum).slice(-4)\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4922,"Name":"setWelfareCheck","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = '';\r\nvar value2 = '';\r\nif (params.WelfareCheck.EnableDisableWelfareCheck == 'true') {\r\n value += '1';\r\n var time = params.WelfareCheck.CheckTime * 60; //in minutes\r\n value += ('0000000000000000000000000000000' + decimalToBinary(parseInt(time))).slice(-31);\r\n} else {\r\n value += ('0000000000000000000000000000000' + decimalToBinary(parseInt(3600))).slice(-31); //default\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nif (params.WelfareCheck.DialWarningTime == 'true') {\r\n value2 += '1';\r\n var time = params.WelfareCheck.WarningTime * 60; //in minutes\r\n value2 += ('0000000000000000000000000000000' + decimalToBinary(parseInt(time))).slice(-31);\r\n} else {\r\n value2 += ('0000000000000000000000000000000' + decimalToBinary(parseInt(300))).slice(-31); // default\r\n}\r\nvalue2 = ('00000000' + binaryToHex(value2)).slice(-8).toUpperCase();\r\nvalue2 = changeEndianness(value2);\r\n// join both msg\r\nvalue += value2;\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '09';\r\nvar key = '57';\r\nvar totalLenght = '0B00';\r\nif (params.DeviceVersion.DeviceVersion == '2') { // command not for watch so mic to 10\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n value = '10';\r\n totalLenght = '0400';\r\n}\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin;\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa;\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4921,"Name":"setPhoneSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = '00000000000000000000';\r\nif (params.PhoneSettings.SMSWhiteList == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.PhoneSettings.SilentCallMode == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.PhoneSettings.ButtonHangUp == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.PhoneSettings.WhiteList == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.PhoneSettings.AutoAnswer == 'true') {\r\n value += '1';\r\n if (params.PhoneSettings.AutoAnswerAfterRings) {\r\n value += ('0000000' + decimalToBinary(parseInt(params.PhoneSettings.AutoAnswerAfterRings))).slice(-7);\r\n } else {\r\n value += ('0000000');\r\n }\r\n} else {\r\n value += '00000000';\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '33';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('')\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF)\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('')\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4920,"Name":"setTiltAlertSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = ''\nif (params.TiltAlert.EnableDisableTiltAlert == 'true') {\n value += '1';\n if (params.TiltAlert.Dial == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n value += '000000';\n if (params.TiltAlert.Angle) {\n var angle = ('00000000' + decimalToBinary(parseInt(params.TiltAlert.Angle))).slice(-8);\n value += angle;\n }\n if (params.TiltAlert.Time) {\n var time = ('0000000000000000' + decimalToBinary(parseInt(params.TiltAlert.Time))).slice(-16);\n value += time;\n }\n} else {\n value = '0';\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\nvalue = changeEndianness(value);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '55';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = changeEndianness(checksum);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]}],"Operations":[{"Id":314,"Name":"OnUpdateProtocol_CareWatch","Operation":"/*\r\nlet configsToUpdate = [];\r\nif (configs.HeartRateMonitor.EnableDisableHeartRateMonitor === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.HeartRateMonitor.EnableDisableHeartRateMonitor,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.HeartRateMonitor.HeartRateDetectingInterval === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.HeartRateMonitor.HeartRateDetectingInterval,\r\n 'value': '10'\r\n });\r\n}\r\nif (configs.StepCounting.EnableDisableStepCounting === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.StepCounting.EnableDisableStepCounting,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.StepCounting.StepCountingInterval === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.StepCounting.StepCountingInterval,\r\n 'value': '10'\r\n });\r\n}\r\nif (configs.DeviceVersion.DeviceVersion === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.DeviceVersion.DeviceVersion,\r\n 'value': '1'\r\n });\r\n}\r\nif (configs.NoActivity.EnableDisableNoActivity === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.NoActivity.EnableDisableNoActivity,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.NoActivity.NoActivity === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.NoActivity.NoActivity,\r\n 'value': '3600'\r\n });\r\n}\r\nif (configs.VoicePrompt.Activity === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Activity,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.AlarmCancel === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.AlarmCancel,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.AlarmComplete === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.AlarmComplete,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.BaseLocation === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.BaseLocation,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Battery === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Battery,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Beep === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Beep,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.BLE === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.BLE,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call1 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call1,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call2 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call2,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call3 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call3,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call4 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call4,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call5 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call5,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call6 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call6,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call7 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call7,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call8 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call8,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call9 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call9,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call10 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call10,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.CallDisconnected === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.CallDisconnected,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.CallError === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.CallError,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.CallHang === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.CallHang,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Charging === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Charging,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Click === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Click,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Fall === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Fall,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Find === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Find,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Motion === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Motion,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.NoMotion === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.NoMotion,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.SOS === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.SOS,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Tilt === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Tilt,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.TiltCancel === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.TiltCancel,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Time === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Time,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.EnableControl.Step === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.EnableControl.Step,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.SystemLanguage.Language === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.SystemLanguage.Language,\r\n 'value': 'en-US'\r\n });\r\n}\r\nif (configs.WelfareCheck.EnableDisableWelfareCheck === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.WelfareCheck.EnableDisableWelfareCheck,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.WelfareCheck.CheckTime === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.WelfareCheck.CheckTime,\r\n 'value': '60'\r\n });\r\n}\r\nif (configs.WelfareCheck.WarningTime === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.WelfareCheck.WarningTime,\r\n 'value': '10'\r\n });\r\n}\r\nif (configs.WelfareCheck.DialWarningTime === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.WelfareCheck.DialWarningTime,\r\n 'value': 'false'\r\n });\r\n}\r\nvar msg = {\r\n 'configsToUpdate': configsToUpdate\r\n};\r\nconsole.log(msg); */","Type":1,"ProtocolActionObjects":[]},{"Id":313,"Name":"Access TEC Roam","Operation":"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\r\n ///////////////////////////////////////////////////////////////////////////////\r\n //\r\n // Roam protocol - please see variables and typical values in order below\r\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\r\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\",\r\n //\r\n // Author: Joe Bloggs\r\n // Created: 01/01/0000\r\n // Last modified: 12/04/2024\r\n //\r\n ///////////////////////////////////////////////////////////////////////////////\r\n if (typeof localTesting === \"undefined\") {\r\n var localTesting = \"False\";\r\n }\r\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\r\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\r\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\r\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\r\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\r\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\r\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\r\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\r\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\r\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\r\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\r\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\r\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\r\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\r\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\r\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\r\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\r\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\r\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\r\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\r\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\r\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n ];\r\n var codeValues = [];\r\n AddValue(codeValues, 'protocol_template', 'Roam');\r\n AddValue(codeValues, 'product', serverParams.ProductName);\r\n var dataToReceiver = [];\r\n var configsToAck = [];\r\n var configsToUpdate = [];\r\n var configsToSend = [];\r\n if (globalTemplate == \"True\") {\r\n if (raw.startsWith('esendex')) {\r\n AddValue(codeValues, 'rawMsg', raw);\r\n //general SMS message\r\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n return;\r\n }\r\n AddValue(codeValues, 'raw', raw);\r\n AddValue(codeValues, 'rawMsg', rawFromBytes);\r\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\r\n var homeBeacon = '';\r\n var homeWiFi = '';\r\n var contacts = '';\r\n var gps_data = '';\r\n var wifi_data = '';\r\n var status_data = '';\r\n var lbs_data = '';\r\n var beacon_data = '';\r\n var ble_data = '';\r\n var smart_data = '';\r\n //parse header & properties\r\n var message = rawFromBytes;\r\n var properties = message.substring(2, 4);\r\n var lengthLittleEndian = message.substring(4, 8);\r\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\r\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\r\n var messageForReceiver;\r\n var sequenceID = message.substring(12, 16);\r\n var command = message.substring(16, 18);\r\n var index = 18;\r\n var prefix = 'AB' + '00';\r\n var lengthAck = 0;\r\n var ack = '';\r\n var needsAck = false;\r\n var hasConfigs = false;\r\n var general = '';\r\n var timestamp = '';\r\n var info = '';\r\n var customID = '';\r\n latitude = 0;\r\n longitude = 0;\r\n location_accuracy = 0; // GPS location adds the accuracy\r\n location_time = event_time = '';\r\n speed = 0.0;\r\n var location_type = '0';\r\n //var gen_location = '0'; \r\n var i; // general loop counter\r\n var battery_percentage = '';\r\n var cellNetworkSignal = '';\r\n var workMode = '';\r\n //mask bitwise (properties should be '10')\r\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\r\n needsAck = true;\r\n }\r\n // Loop to decode multi-ACK msg\r\n if (message.includes('AB00030008C7')) {\r\n const multiack = message.split('AB00');\r\n for (let i = 1; i < multiack.length; i++) {\r\n message = 'AB00' + multiack[i];\r\n debug(message);\r\n decoder(message);\r\n } // FOR multiACK\r\n } else decoder(message); // IF multiACK\r\n } else if (oystaTemplate == 'True') { // Oysta Template \r\n AddValue(codeValues, 'rawMsg', raw);\r\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\r\n var gen_location = params.gps_data.split(',');\r\n var latitude = gen_location[0];\r\n var longitude = gen_location[1];\r\n var location_accuracy = gen_location[2];\r\n var speed = gen_location[3];\r\n var direction = gen_location[4];\r\n var altitude = gen_location[5];\r\n var satellites = gen_location[6];\r\n var mileage = gen_location[7];\r\n if (location_accuracy !== 0) {\r\n var fix_state = 1;\r\n } else {\r\n var fix_state = 0;\r\n }\r\n AddValue(codeValues, 'latitude', latitude);\r\n AddValue(codeValues, 'longitude', longitude);\r\n AddValue(codeValues, 'speed', speed);\r\n AddValue(codeValues, 'direction', direction);\r\n AddValue(codeValues, 'altitude', altitude);\r\n AddValue(codeValues, 'location_accuracy', location_accuracy);\r\n AddValue(codeValues, 'mileage', mileage);\r\n AddValue(codeValues, 'satellites', satellites);\r\n AddValue(codeValues, 'fix_state', fix_state);\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\r\n var variables = []; //Define array\r\n variables = params.lbs_data.split(',');\r\n var index = 2;\r\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\r\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\r\n AddValue(codeValues, 'mcc', variables[0]);\r\n AddValue(codeValues, 'mnc', variables[1]);\r\n AddValue(codeValues, 'lac', variables[index]);\r\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\r\n AddValue(codeValues, 'cellid', variables[index + 2]);\r\n }\r\n index += 3;\r\n }\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\r\n var bssid_array = params.wifi_data.split(',');\r\n var index = 0;\r\n for (let i = 0; i < (bssid_array.length / 2); i++) {\r\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\r\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\r\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\r\n }\r\n index += 2;\r\n }\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n // when Beacon is detected and it isn't flic BLE detected\r\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\r\n var gen_location = params.beacon_data.split(',');\r\n var latitude = gen_location[0];\r\n var longitude = gen_location[1];\r\n var mac = gen_location[2];\r\n var label = gen_location[3];\r\n AddValue(codeValues, 'latitude', latitude);\r\n AddValue(codeValues, 'longitude', longitude);\r\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\r\n // AddValue(codeValues,'beacon_mac', mac);\r\n //AddValue(codeValues,'beacon_major', 0);\r\n //AddValue(codeValues,'beacon_minor', 0);\r\n //<>,<>,<> \r\n if (mac) {\r\n AddValue(codeValues, 'beacon_mac', mac);\r\n var simpleQuery = [{\r\n 'code': 'Mac',\r\n 'value': mac,\r\n }];\r\n var simpleQueryLabel = {\r\n 'table': 'beacons',\r\n 'select': 'Name',\r\n 'query': simpleQuery\r\n };\r\n var labels = [];\r\n labels.push(JSON.stringify(simpleQueryLabel));\r\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\r\n }\r\n if (params.beacon_major) {\r\n AddValue(codeValues, 'beacon_major', params.beacon_major);\r\n } else {\r\n AddValue(codeValues, 'beacon_major', 0);\r\n }\r\n if (params.beacon_minor) {\r\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\r\n } else {\r\n AddValue(codeValues, 'beacon_minor', 0);\r\n }\r\n //AddValue(codeValues,'oysta_labels', label);\r\n //AddValue(codeValues,'oysta_value', mac);\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\r\n var gen_location = params.ble_data.split(',');\r\n var flag = gen_location[0];\r\n var batLevel = gen_location[1];\r\n var mac2 = gen_location[2];\r\n //var label = gen_location[3];\r\n AddValue(codeValues, 'flagBLE', flag);\r\n AddValue(codeValues, 'batBLE', batLevel);\r\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\r\n // AddValue(codeValues,'beacon_mac', mac);\r\n //AddValue(codeValues,'beacon_major', 0);\r\n //AddValue(codeValues,'beacon_minor', 0);\r\n //<>,<>,<> \r\n if (mac2) {\r\n AddValue(codeValues, 'beacon_mac', mac2);\r\n var simpleQuery2 = [{\r\n 'code': 'Mac',\r\n 'value': mac2,\r\n }];\r\n var simpleQueryLabel2 = {\r\n 'table': 'beacons',\r\n 'select': 'Name',\r\n 'query': simpleQuery2\r\n };\r\n var labels2 = [];\r\n labels2.push(JSON.stringify(simpleQueryLabel2));\r\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\r\n }\r\n if (params.beacon_major) {\r\n AddValue(codeValues, 'beacon_major', params.beacon_major);\r\n } else {\r\n AddValue(codeValues, 'beacon_major', 0);\r\n }\r\n if (params.beacon_minor) {\r\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\r\n } else {\r\n AddValue(codeValues, 'beacon_minor', 0);\r\n }\r\n //AddValue(codeValues,'oysta_labels', label);\r\n //AddValue(codeValues,'oysta_value', mac);\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n /* meter mas tarde... \r\n if (params.smart_data !== 'undefined') {\r\n var gen_location = params.smart_data.split(',')\r\n var latitude = gen_location[0]\r\n var longitude = gen_location[1]\r\n var location_accuracy = gen_location[2]\r\n var altitude = gen_location[3]\r\n AddValue(codeValues,'latitude', latitude);\r\n AddValue(codeValues,'longitude', longitude);\r\n AddValue(codeValues,'altitude', altitude);\r\n AddValue(codeValues,'location_accuracy', location_accuracy);\r\n }\r\n */\r\n /*else if ((params.event_time) && (params.event_time == '')) {\r\n var event_time = moment.utc().unix();\r\n AddValue(codeValues,'event_time', event_time);\r\n } revisar mas adelante*/\r\n // to parse SMS info from the device\r\n switch (messageTypeLocalCode) {\r\n case 'COMM-SMS': // SMS message sent in\r\n if (params.data.startsWith('Device location request')) {\r\n configsToAck.push(configIds.Controls.RealTimeLocate);\r\n } else if (params.data.startsWith('Set IP ok')) {\r\n configsToAck.push(configIds.Controls.GetCurrentConfig);\r\n } else if (params.data.startsWith('IMEI:')) {\r\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\r\n } else if (params.data.startsWith('Set IP ok')) {\r\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\r\n } else if (params.data.startsWith('flush ok')) {\r\n configsToAck.push(configIds.Controls.GetCurrentConfig);\r\n } else if (params.data.startsWith('Set Roam-')) {\r\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\r\n } else if (params.data.startsWith('set live tracking')) {\r\n configsToAck.push(configIds.Controls.Trace);\r\n } else if (params.data.startsWith('reboot ok')) {\r\n configsToAck.push(configIds.Controls.Reboot);\r\n } else if (params.data.startsWith('GPS')) {\r\n configsToAck.push(configIds.Controls.RealTimeLocate);\r\n var i1 = params.data.search('Now:')\r\n var i2 = params.data.search('Loc Time:')\r\n var i3 = params.data.search('Speed:')\r\n var i4 = params.data.search('Altitude:')\r\n var i5 = params.data.search('Battery:')\r\n var i6 = params.data.search('google')\r\n var eventTime = params.data.substring(i2 + 9, i3)\r\n var Speed = params.data.substring(i3 + 6, i4 - 3)\r\n if (params.data.substring(i4 - 3, i4) == 'mph') {\r\n Speed = Speed * 0.44704\r\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\r\n Speed = Speed / 3.6\r\n }\r\n var latlong = params.data.substring(i6 + 18)\r\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\r\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\r\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\r\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n break;\r\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\r\n //var i1 = params.data.search('IMEI:')\r\n //var i2 = params.data.search('GSM signal quality:')\r\n var i3 = params.data.search('Software version:')\r\n var sub = params.data.substring(i3 + 17, params.data.length)\r\n var i4 = sub.search('version:');\r\n var fwVersion = sub.substring(i4, sub.length);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"fwVersion\", fwVersion);\r\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\r\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\r\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\r\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\r\n break;\r\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\r\n var i1 = params.data.search('Fall alarm:');\r\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\r\n var i2 = params.data.search('level:');\r\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"sensibility\", sensibility);\r\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\r\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\r\n break;\r\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\r\n var i1 = raw.search('1,');\r\n //var i2 = params.data.search('2,');\r\n //var homeBeacon = params.data.substring(i1+2, i2);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"homeBeacon\", raw.substring(i1, raw.length));\r\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\r\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\r\n break;\r\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n var i1 = raw.search('A1:');\r\n if (raw.includes('A2:')) {\r\n var i2 = raw.search('A2:');\r\n } else {\r\n var i2 = raw.search('A10:');\r\n }\r\n var tel = raw.substring(i1 + 4, i2);\r\n AddValue(codeValues, \"EmergencyNumber\", tel);\r\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\r\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\r\n i2 = raw.search('A10:')\r\n tel = raw.substring(i2 + 4, raw.length);\r\n AddValue(codeValues, \"SMSGateway\", tel);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\r\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\r\n AddValue(codeValues, \"ApprovedContacts\", raw.substring(i1, raw.length));\r\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\r\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\r\n break;\r\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n var i1 = params.data.search('APN:')\r\n var i2 = params.data.search('IP:')\r\n var i3 = params.data.search('Move')\r\n var apn = params.data.substring(i1 + 4, i2);\r\n AddValue(codeValues, \"apn\", apn);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\r\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\r\n var serverDetails = params.data.substring(i2 + 3, i3);\r\n AddValue(codeValues, \"server\", serverDetails);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\r\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\r\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n break;\r\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\r\n var i3 = params.data.search('Speed:')\r\n var i4 = params.data.search('Altitude:')\r\n var i5 = params.data.search('Battery:')\r\n var i6 = params.data.search('google')\r\n var eventTime = params.data.substring(0, i3)\r\n var Speed = params.data.substring(i3 + 6, i4 - 3)\r\n if (params.data.substring(i4 - 3, i4) == 'mph') {\r\n Speed = Speed * 0.44704\r\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\r\n Speed = Speed / 3.6\r\n }\r\n var latlong = params.data.substring(i6 + 18)\r\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\r\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n break;\r\n }\r\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \r\n var event_time = moment.utc().unix();\r\n AddValue(codeValues, 'event_time', event_time);\r\n }\r\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \r\n // var location_time = moment.utc().unix();\r\n // AddValue(codeValues, 'location_time', location_time);\r\n //}\r\n }\r\n var dataToReceiver = {\r\n 'values': codeValues\r\n };\r\n if (configsToAck.length > 0) {\r\n dataToReceiver.configsToAck = configsToAck\r\n };\r\n if (configsToUpdate.length > 0) {\r\n dataToReceiver.configsToUpdate = configsToUpdate\r\n };\r\n if (configsToSend.length > 0) {\r\n dataToReceiver.configsToSend = configsToSend\r\n };\r\n console.log(dataToReceiver);\r\n //}\r\n //return {\r\n // 'output': dataToReceiver\r\n //}\r\n // end of main operation\r\n // define functions used in operation\r\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n codeValueArray.push(cvpair);\r\n }\r\n\r\n function decoder(str) { // decode rawdata\r\n // CARE Decoder\r\n AddValue(codeValues, 'Message : ', str);\r\n var message = str;\r\n // need to check if checksum is correct for possible msg corruption 10/03/23\r\n var checksum = message.substring(8, 12);\r\n var messageBody = message.substring(16, message.length);\r\n debug('message =' + message);\r\n debug('checksum =' + checksum);\r\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\r\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\r\n debug(\"message has valid checksum\");\r\n var messageBody = command; // update value for the ACK\r\n debug('command =' + command);\r\n if (command == '01') {\r\n while (index < total_length + 16) {\r\n // gen_location = '0'; //cambiado 30/09\r\n var keyLengthHex = message.substring(index, index = index + 2);\r\n var keyLength = 2 * hexToDecimal(keyLengthHex);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n debug('key = ' + key);\r\n debug('value = ' + value);\r\n switch (key) {\r\n //Device ID\r\n case '01':\r\n var imei = hex_to_ascii(value);\r\n break;\r\n //Alarm code\r\n case '02':\r\n var alarm = 'CYC';\r\n var alarmCode = value.substring(0, 8);\r\n alarmCode = changeEndianness(alarmCode);\r\n var timestampHex = value.substring(8, 16);\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n event_time = timestamp;\r\n var alarmCodeInt = hexToDecimal(alarmCode);\r\n var alarmCodeExt = value.substring(16, 24);\r\n alarmCodeExt = changeEndianness(alarmCodeExt);\r\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\r\n //Extended Alerts\r\n // Fall off\r\n if ((alarmCodeExtInt & 1) == 1) {\r\n var alarm = 'ALF-C';\r\n }\r\n // Welfare Check-out\r\n else if ((alarmCodeExtInt & 2) == 2) {\r\n var alarm = 'ALA-C';\r\n }\r\n // Standard Alerts\r\n //Battery low\r\n else if ((alarmCodeInt & 1) == 1) {\r\n var alarm = 'BATL';\r\n }\r\n //Overspeed\r\n else if ((alarmCodeInt & 2) == 2) {\r\n var alarm = 'ALSP';\r\n }\r\n //Fall\r\n else if ((alarmCodeInt & 4) == 4) {\r\n var alarm = 'ALF';\r\n }\r\n //Tilt\r\n else if ((alarmCodeInt & 8) == 8) {\r\n var alarm = 'Tilt';\r\n } else if ((alarmCodeInt & 16) == 16) {\r\n if ((alarmCodeInt & 16777216) == 16777216) {\r\n var alarm = 'Geo1-IN';\r\n } else {\r\n var alarm = 'Geo1-OUT';\r\n }\r\n } else if ((alarmCodeInt & 32) == 32) {\r\n if ((alarmCodeInt & 33554432) == 33554432) {\r\n var alarm = 'Geo2-IN';\r\n } else {\r\n var alarm = 'Geo2-OUT';\r\n }\r\n } else if ((alarmCodeInt & 64) == 64) {\r\n if ((alarmCodeInt & 67108864) == 67108864) {\r\n var alarm = 'Geo3-IN';\r\n } else {\r\n var alarm = 'Geo3-OUT';\r\n }\r\n } else if ((alarmCodeInt & 128) == 128) {\r\n if ((alarmCodeInt & 134217728) == 134217728) {\r\n var alarm = 'Geo4-IN';\r\n } else {\r\n var alarm = 'Geo4-OUT';\r\n }\r\n }\r\n //Power Off\r\n else if ((alarmCodeInt & 256) == 256) {\r\n var alarm = 'PWRF';\r\n }\r\n //Power On\r\n else if ((alarmCodeInt & 512) == 512) {\r\n var alarm = 'PWRN';\r\n }\r\n //Motion\r\n else if ((alarmCodeInt & 1024) == 1024) {\r\n var alarm = 'ALMOV';\r\n }\r\n //No Motion\r\n else if ((alarmCodeInt & 2048) == 2048) {\r\n var alarm = 'ALNM';\r\n }\r\n //SOS\r\n else if ((alarmCodeInt & 4096) == 4096) {\r\n var alarm = 'ALSOS';\r\n } else if ((alarmCodeInt & 8192) == 8192) {\r\n var alarm = 'Side1';\r\n } else if ((alarmCodeInt & 16384) == 16384) {\r\n var alarm = 'Side2';\r\n }\r\n //Battery charging\r\n else if ((alarmCodeInt & 32768) == 32768) {\r\n var alarm = 'BATCN';\r\n }\r\n //Battery no charging\r\n else if ((alarmCodeInt & 65536) == 65536) {\r\n var alarm = 'BATCF';\r\n }\r\n //SOS Ending\r\n // Temporary Commented until we know exactly how it works. 22/09/2022\r\n else if ((alarmCodeInt & 131072) == 131072) {\r\n var alarm = 'SOSEnding';\r\n info = 'Alarm Finished';\r\n }\r\n //Amber Alert EC03 only\r\n else if ((alarmCodeInt & 262144) == 262144) {\r\n var alarm = 'ALAO';\r\n }\r\n // welfare Alert check-in ALA-O\r\n else if ((alarmCodeInt & 524288) == 524288) {\r\n var alarm = 'ALA-O';\r\n }\r\n // Amber alert Ending ALA-C\r\n else if ((alarmCodeInt & 1048576) == 1048576) {\r\n var alarm = 'ALA-C';\r\n }\r\n // Amber alert Ending ALA-C\r\n //else if ((alarmCodeInt & 1048576) == 1048576) {\r\n // var alarm = 'ALA-C';\r\n //}\r\n // Fall-Down Alert ending\r\n else if ((alarmCodeInt & 2097152) == 2097152) {\r\n var alarm = 'ALF-C';\r\n }\r\n // welfare Alert Ending ALA\r\n else if ((alarmCodeInt & 4194304) == 4194304) {\r\n var alarm = 'ALA';\r\n }\r\n // Beacon absent Alert 11/10/22. Need to be added in msg types\r\n //else if ((alarmCodeInt & 16777216) == 16777216) {\r\n // var alarm = 'BEA';\r\n //}\r\n general += 'alarm:' + alarm + ',';\r\n break;\r\n //Custom ID\r\n case '03':\r\n // in value is customID.... '06' for Watch Care\r\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\r\n //update customID to check if belongs to this type of device\r\n customID = value;\r\n if (value != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n } else {\r\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\r\n sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n AddValue(codeValues, \"customID\", value);\r\n general += 'customID:' + value + ',';\r\n break;\r\n }\r\n //Historical Data Completed\r\n case '10': // indica q se han terminado de enviar todos los datos historicos.\r\n var histData = true;\r\n break;\r\n //GPS location\r\n case '20':\r\n location_type = 'GPS';\r\n var latitudeHex = value.substring(0, 8);\r\n var longitudeHex = value.substring(8, 16);\r\n var speedHex = value.substring(16, 20);\r\n var directionHex = value.substring(20, 24);\r\n var altitudeHex = value.substring(24, 28);\r\n var location_accuracyHex = value.substring(28, 32);\r\n var mileageHex = value.substring(32, 40);\r\n var satellitesHex = value.substring(40, 42);\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\r\n var direction = hexToDecimal(changeEndianness(directionHex));\r\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\r\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\r\n // Range: 0.5 to 99.9 \r\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\r\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\r\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\r\n var satellites = hexToDecimal(satellitesHex);\r\n // location_time = timestamp;\r\n //<>,<>,<>,<>,<>\r\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\r\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\r\n break;\r\n //WIFI Towers\r\n case '22':\r\n location_type = 'WIFI';\r\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\r\n //location_time = timestamp;\r\n var wifiTowers = value;\r\n general += 'wifiTowers:';\r\n var indexWifi = 0;\r\n var bssid_array = [];\r\n wifi_data = '';\r\n for (let i = 0; i < numWifi; i++) {\r\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\r\n indexWifi += 14;\r\n }\r\n wifi_data = wifi_data.slice(0, -1);\r\n general += wifi_data;\r\n break;\r\n //BLE Location Added 10/10/22\r\n case '23':\r\n location_type = 'BLE';\r\n var mac = value.substring(0, 12);\r\n var latitudeHex = value.substring(12, 20);\r\n var longitudeHex = value.substring(20, 28);\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n var address = hex_to_ascii(value.substring(28, value.length));\r\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\r\n // add : format in MAC\r\n mac = mac.match(/.{1,2}/g).join(':');\r\n // location_time = timestamp;\r\n ble_data = `${latitude},${longitude},${mac},${address}`;\r\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\r\n break;\r\n //General Data , status_data\r\n case '24':\r\n //var general = 'true'\r\n if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }\r\n if (alarmCode) {\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\r\n } else if (statusDevice) {\r\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\r\n }\r\n //else {\r\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\r\n //}\r\n // reset variables\r\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\r\n var timestampHex = value.substring(0, 8);\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n location_time = timestamp;\r\n // HardCode to fix possible issue in protocol\r\n // event_time = timestamp; \r\n event_time = moment.utc().unix();\r\n // end of hard code\r\n var statusHex = changeEndianness(value.substring(8, 16));\r\n var statusInt = hexToDecimal(statusHex);\r\n var statusDevice = '';\r\n if ((statusInt & 1) == 1) {\r\n statusDevice += 'GPS,';\r\n }\r\n if ((statusInt & 2) == 2) {\r\n statusDevice += 'WIFISource,';\r\n }\r\n if ((statusInt & 4) == 4) {\r\n statusDevice += 'CellTower,';\r\n }\r\n if ((statusInt & 8) == 8) {\r\n statusDevice += 'BLELocation,';\r\n }\r\n //params.BatteryStatus.BatteryStatus = '1';\r\n if ((statusInt & 16) == 16) {\r\n statusDevice += 'Charging,';\r\n // var alarm = 'BATCN';\r\n //configs.BatteryStatus.BatteryStatus = '1';\r\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\r\n hasConfigs = true;\r\n var batteryStatus = '1';\r\n var alarm = 'BATCN';\r\n let configsToUpdate = [];\r\n configsToUpdate.push({\r\n 'code': configIds.BatteryStatus.BatteryStatus,\r\n 'value': batteryStatus\r\n });\r\n }*/\r\n }\r\n if ((statusInt & 32) == 32) {\r\n statusDevice += 'FUllyCharged,';\r\n //var alarm = 'BATF';\r\n // configs.BatteryStatus.BatteryStatus = '3';\r\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\r\n hasConfigs = true;\r\n var batteryStatus = '3';\r\n var alarm = 'BATF';\r\n let configsToUpdate = [];\r\n configsToUpdate.push({\r\n 'code': configIds.BatteryStatus.BatteryStatus,\r\n 'value': batteryStatus\r\n });\r\n }*/\r\n }\r\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\r\n statusDevice += 'Not Charging,';\r\n var alarm = 'BATCF';\r\n //configs.BatteryStatus.BatteryStatus = '2';\r\n if (configs.BatteryStatus.BatteryStatus !== '2') {\r\n var batteryStatus = '2';\r\n var alarm = 'BATCF';\r\n let configsToUpdate = [];\r\n configsToUpdate.push({\r\n 'code': configIds.BatteryStatus.BatteryStatus,\r\n 'value': batteryStatus\r\n });\r\n }\r\n }*/\r\n if ((statusInt & 64) == 64) {\r\n statusDevice += 'Reboot,';\r\n }\r\n if ((statusInt & 128) == 128) {\r\n statusDevice += 'HistoricalData,';\r\n }\r\n if ((statusInt & 256) == 256) {\r\n statusDevice += 'AGPSDataValid,';\r\n }\r\n if ((statusInt & 512) == 512) {\r\n statusDevice += 'Motion,';\r\n }\r\n if ((statusInt & 1024) == 1024) {\r\n statusDevice += 'SmartLocating,';\r\n }\r\n if ((statusInt & 2048) == 2048) { //isHome\r\n statusDevice += 'BeaconLocation,';\r\n }\r\n if ((statusInt & 4096) == 4096) {\r\n statusDevice += 'BLEConnected,';\r\n }\r\n if ((statusInt & 16384) == 16384) {\r\n statusDevice += 'HomeWiFi,';\r\n }\r\n statusDevice = statusDevice.slice(0, -1);\r\n status_data = statusDevice; //to oysta template\r\n //statusHex = (statusHex);\r\n statusHex = hex2bin(statusHex);\r\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\r\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\r\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\r\n workMode = parseInt(statusHex.substring(13, 16), 2);\r\n general += 'statusDevice:' + statusDevice + ',';\r\n if (battery_percentage) {\r\n general += 'battery:' + battery_percentage + ',';\r\n }\r\n if (cellNetworkSignal) {\r\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\r\n }\r\n if (workMode) {\r\n general += 'workMode:' + workMode + ',';\r\n }\r\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\r\n break;\r\n //Call Records\r\n case '25':\r\n //Needed?\r\n break;\r\n //BLE Location 2\r\n case '26':\r\n //I don't understand\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //Smart Location\r\n case '27':\r\n location_type = 'SMART';\r\n var latitudeHex = value.substring(0, 8);\r\n var longitudeHex = value.substring(8, 16);\r\n var location_accuracyHex = value.substring(16, 20);\r\n var altitudeHex = value.substring(20, 24);\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\r\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\r\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\r\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\r\n //location_time = timestamp;\r\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\r\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\r\n break;\r\n //Beacon Location Added 11/10/22\r\n case '28':\r\n location_type = 'BEACON';\r\n // var alarm = 'EBZI';\r\n var latitudeHex = '00';\r\n var longitudeHex = '00';\r\n var descr = 'empty';\r\n var flag = hexToDecimal(value.substring(0, 1));\r\n var beacId = hexToDecimal(value.substring(1, 2));\r\n // msg includes descrip\r\n if ((flag & 4) == 4) {\r\n descr = hex_to_ascii(value.substring(18, value.length));\r\n }\r\n // msg includes lat/lon\r\n if ((flag & 8) == 8) {\r\n latitudeHex = value.substring(18, 26);\r\n longitudeHex = value.substring(26, 34);\r\n }\r\n // msg includes lat/lon and description\r\n if ((flag & 12) == 12) {\r\n latitudeHex = value.substring(18, 26);\r\n longitudeHex = value.substring(26, 34);\r\n descr = hex_to_ascii(value.substring(34, value.length));\r\n }\r\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\r\n // add : format in MAC\r\n mac = mac.match(/.{1,2}/g).join(':');\r\n var rssiHex = value.substring(14, 16);\r\n var rssi1Hex = value.substring(16, 18);\r\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\r\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\r\n // var latitudeHex = value.substring(18, 26);\r\n // var longitudeHex = value.substring(26, 34);\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n //location_time = timestamp;\r\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\r\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\r\n break;\r\n // Beacon V2\r\n case '2C':\r\n location_type = 'BEACON';\r\n // var alarm = 'EBZI';\r\n var latitudeHex = '00';\r\n var longitudeHex = '00';\r\n var descr = 'empty';\r\n var flag = hexToDecimal(value.substring(0, 1));\r\n var beacId = hexToDecimal(value.substring(1, 2));\r\n // msg includes descrip\r\n if ((flag & 4) == 4) {\r\n let desc_leng = hexToDecimal(value.substring(20, 22));\r\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\r\n //descr = hex_to_ascii(value.substring(18, value.length));\r\n }\r\n // msg includes lat/lon\r\n if ((flag & 8) == 8) {\r\n latitudeHex = value.substring(18, 26);\r\n longitudeHex = value.substring(26, 34);\r\n }\r\n // msg includes lat/lon and description\r\n if ((flag & 12) == 12) {\r\n latitudeHex = value.substring(20, 28);\r\n longitudeHex = value.substring(28, 36);\r\n let desc_leng = hexToDecimal(value.substring(36, 38));\r\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\r\n }\r\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\r\n // add : format in MAC\r\n mac = mac.match(/.{1,2}/g).join(':');\r\n var rssiHex = value.substring(14, 16);\r\n var rssi1Hex = value.substring(16, 18);\r\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\r\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\r\n var battery_beacon = hexToDecimal(value.substring(18, 20));\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n //location_time = timestamp;\r\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\r\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\r\n break;\r\n //Cell Towers Note\r\n case '29':\r\n location_type = 'LBS';\r\n lbs_data = '';\r\n var mccHex = changeEndianness(value.substring(0, 4));\r\n var mncHex = value.substring(4, 6);\r\n var mcc = hexToDecimal(mccHex);\r\n lbs_data += mcc + ',';\r\n var mnc = hexToDecimal(mncHex);\r\n lbs_data += mnc + ',';\r\n var indexLbs = 6;\r\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\r\n for (let i = 0; i < numTowers; i++) {\r\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\r\n var rxl = hexToDecimal(rxlHex);\r\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\r\n var lac = hexToDecimal(lacHex);\r\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\r\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\r\n indexLbs += 14;\r\n }\r\n lbs_data = lbs_data.slice(0, -1);\r\n general += lbs_data;\r\n break;\r\n case '30':\r\n //G-sensor. \r\n if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }\r\n var numStep = (keyLength - 2) / 16;\r\n for (let j = 0; j < numStep; j++) {\r\n var timestampHex = value.substring(0, 8);\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n //timestamp = hexToDecimalSigned(timestampHex);\r\n var stepHex = value.substring(8, 16);\r\n stepHex = changeEndianness(stepHex);\r\n var stepRate = hexToDecimal(stepHex);\r\n info = stepRate;\r\n //var alarmCode = 'True';\r\n var alarm = 'STP';\r\n general += ' step counting' + j + ':' + stepRate + ',';\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n break;\r\n //Activity\r\n case '31':\r\n //I don't understand\r\n break;\r\n //BLE MAC list\r\n case '32':\r\n //I don't understand\r\n break;\r\n //Beacon List\r\n case '33':\r\n //I don't understand\r\n break;\r\n //Heart Rate Data\r\n case '40':\r\n if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }\r\n var numHeartRate = (keyLength - 2) / 12;\r\n for (let j = 0; j < numHeartRate; j++) {\r\n var timestampHex = value.substring(0, 8);\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n //timestamp = hexToDecimalSigned(timestampHex);\r\n var heartRateHex = value.substring(8, 10);\r\n var heartRate = hexToDecimal(heartRateHex);\r\n var trustLevelHex = value.substring(10, 12);\r\n var trustLevel = hexToDecimal(trustLevelHex);\r\n info = heartRate;\r\n //var alarmCode = 'True';\r\n var alarm = 'HRT';\r\n general += ' heart rate' + j + ':' + heartRate + ',';\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n break;\r\n //BLE Connected . For Flic button\r\n case '62':\r\n location_type = 'BLE';\r\n //var alarm = 'EBZI'; \r\n //var latitudeHex = '00';\r\n //var longitudeHex = '00';\r\n //var descr = 'empty';\r\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\r\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\r\n // add : format in MAC\r\n mac = mac.match(/.{1,2}/g).join(':');\r\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\r\n //location_time = timestamp;\r\n ble_data = `${flag},${batLevel},${mac}`;\r\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\r\n break;\r\n }\r\n }\r\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\r\n // \"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\",\r\n if (alarmCode) {\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else if (statusDevice) {\r\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n /*else if (alarm === 'HRT') {\r\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else if (alarm === 'STP') {\r\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else {\r\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }*/\r\n // rest the alarm value\r\n alarm = '';\r\n }\r\n if (command == '02') {\r\n while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n switch (key) {\r\n //Module Number\r\n case '01':\r\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //Firmware version\r\n case '02':\r\n //no ACK need\r\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"fwVersion\", fwVersion);\r\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\r\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\r\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\r\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '1A':\r\n //no ACK need\r\n var fwVersion = hex_to_ascii(value);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"fwVersion\", fwVersion);\r\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\r\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\r\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\r\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\r\n break;\r\n //IMEI\r\n case '03':\r\n var imei = hexToDecimal(value);\r\n // harcode to avoid conflicts with Rio protocol\r\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\r\n // AddValue(codeValues, \"error\", \"device imei is not in this protocol\");\r\n // AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n //AddValue(codeValues, \"IMEI\", imei);\r\n // return\r\n //}\r\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\r\n sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //ICCID\r\n case '04':\r\n var iccid = hexToDecimal(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //BLE-MAC\r\n case '05':\r\n var bleMac = hexToDecimal(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //Run Time\r\n case '07':\r\n var runTime = hexToDecimal(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '10': // Ringer Volume\r\n var volume = hexToDecimal(value);\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"Volume\", volume);\r\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\r\n configsToAck.push(configIds.ReadSystemSettings.Volume);\r\n break;\r\n case '0A': //Performance mode\r\n //var workMode = hexToDecimal(value);\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n //AddValue(codeValues, \"WorkMode\", workMode);\r\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\r\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\r\n //var workMode = hex_to_ascii(value.substring(0, value.length));\r\n //var workMode = hexToDecimal(value);\r\n //var workMode = hex_to_ascii(value.substring(0, value.length));\r\n var workMode = 1234; // + value + \"end\";\r\n //var workModeVal = 9;\r\n //workMode = 'test10';\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\r\n AddValue(codeValues, \"Mode\", workMode);\r\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\r\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n //AddValue(codeValues, \"performanceMode\", performanceMode);\r\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\r\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\r\n break;\r\n case '1B':\r\n //Decimal o ascii?\r\n var gsmModule = hexToDecimal(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '1F':\r\n //System Language\r\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\r\n imei = serverParams.Imei;\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"SystemLanguage\", systemLanguage);\r\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\r\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\r\n break;\r\n case '33': // phone option\r\n // [Value]:83 0B 00 00 {\"phoneOption\":{\"flag_value\":2947,\"s3\":1,\"s4\":0,\"s5\":1,\"s6\":0,\"callIncoming\":0,\"rings\":3,\"s7\":0,\"toneID\":0,\"s1\":1,\"s2\":1}}\r\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\r\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\r\n var auto = 'true';\r\n } else var auto = 'false';\r\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\r\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\r\n allow = 'true';\r\n } else var allow = 'false';\r\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\r\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\r\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\r\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\r\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\r\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\r\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\r\n break;\r\n case '30': //ContactList\r\n var contactNumber = value.substring(1, 2);\r\n var telLength = hexToDecimal(value.substring(2, 4));\r\n var tel = '';\r\n switch (contactNumber) {\r\n // Emergency Number\r\n case '0':\r\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\r\n AddValue(codeValues, \"EmergencyNumber\", tel);\r\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\r\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\r\n break;\r\n // Speed Dial Number\r\n case '1':\r\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\r\n AddValue(codeValues, \"SpeedDialNumber\", tel);\r\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\r\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\r\n break;\r\n // Gateway Number\r\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\r\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\r\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\r\n tel = 'Esendex UK'\r\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\r\n tel = 'Esendex Spain'\r\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\r\n tel = 'Esendex UK Acceptance'\r\n } else {\r\n tel = 'Default'\r\n }\r\n AddValue(codeValues, \"SMSGateway\", tel);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\r\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\r\n break;\r\n default:\r\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\r\n if (tel.length < 6) {\r\n break;\r\n }\r\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\r\n AddValue(codeValues, \"ApprovedContacts\", contacts);\r\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\r\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\r\n break;\r\n }\r\n break;\r\n case '40': // APN\r\n //no ACK need\r\n var apn = hex_to_ascii(value.substring(0, value.length));\r\n imei = serverParams.Imei;\r\n break;\r\n case '41': // APN Username\r\n //no ACK need\r\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\r\n break;\r\n case '42': // APN Password\r\n //no ACK need\r\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\r\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"apn\", apn);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\r\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\r\n break;\r\n case '43': //Server Details\r\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\r\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\r\n if (serverDetails.includes('52.232.85.255:5678')) {\r\n serverDetails = 'Production'\r\n } else if (serverDetails.includes('52.174.17.77:5678')) {\r\n serverDetails = 'Acceptance'\r\n } else if (serverDetails.includes('52.174.17.77:5778')) {\r\n serverDetails = 'Protocol-Import'\r\n } else {\r\n serverDetails = 'Default'\r\n }\r\n AddValue(codeValues, \"server\", serverDetails);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\r\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\r\n break;\r\n case '44': //time interval - work mode intervals\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\r\n var workMode = 0;\r\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\r\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\r\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\r\n //workMode = 'High Frequency';\r\n workMode = 3;\r\n }\r\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\r\n //workMode = 'Balanced';\r\n workMode = 2;\r\n }\r\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\r\n //workMode = 'Power Saving';\r\n workMode = 1;\r\n }\r\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\r\n //workMode = 'No Reporting';\r\n workMode = 0;\r\n }\r\n AddValue(codeValues, \"Mode\", workMode);\r\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\r\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n break;\r\n case '47': // Custom Id\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"customeid\", value);\r\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\r\n configsToAck.push(configIds.ReadState.CustomId);\r\n break;\r\n case '53': // Non motion alert\r\n //2B020080\r\n var status = hex2bin(value.substring(6, 8));\r\n var alertSetting = '';\r\n var enableDisable = '';\r\n if (status.substring(0, 1) == '1') {\r\n alertSetting = 'Enable, '\r\n enableDisable = '1';\r\n } else {\r\n alertSetting = 'Disable, '\r\n };\r\n //if (status.substring(5, 6) == '1') {\r\n // alertSetting += 'Dial, '\r\n //} else {\r\n // alertSetting += 'No Dial, '\r\n //};\r\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\r\n alertSetting += time;\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"nomotion\", alertSetting);\r\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\r\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\r\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\r\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\r\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\r\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\r\n break;\r\n case '56': //Fall down sensibility\r\n // '00001100'\r\n var fallStatus = hex2bin(value.substring(0, 2));\r\n var enalbleDisable = '';\r\n //if (fallStatus.substring(4, 5) == '1') {\r\n if (fallStatus.substring(0, 1) == '1') {\r\n var sensibility = 'Enable, '\r\n enalbleDisable = '1'\r\n } else {\r\n var sensibility = 'Disable, '\r\n };\r\n if (fallStatus.substring(5, 6) == '1') {\r\n sensibility += 'Dial, '\r\n } else {\r\n sensibility += 'No Dial, '\r\n };\r\n var imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\r\n sensibility += sesibityOptionValue;\r\n AddValue(codeValues, \"sensibility\", sensibility);\r\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\r\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\r\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\r\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\r\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\r\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\r\n break;\r\n case '73': //BeaconList\r\n var beaconNumber = hexToDecimal(value.substring(1, 2));\r\n var beaconStatus = hex2bin(value.substring(0, 1));\r\n //if (beaconStatus.substring(4, 5) == '1') {\r\n // homeBeacon += ' Enable, '\r\n //} else {\r\n // homeBeacon += ' Disable, '\r\n //};\r\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\r\n //beaconStatus = changeEndianness(value.substring(30, value.length));\r\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\r\n AddValue(codeValues, \"homeBeacon\", homeBeacon);\r\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\r\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\r\n break;\r\n case '4A': //Wifi Network List\r\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\r\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\r\n var wifiIndex = hexToDecimal(value.substring(1, 2));\r\n var wifiStatus = hexToDecimal(value.substring(0, 1));\r\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\r\n /var homeWifi = '';\r\n if (wifiIndex == '0') { // Only first Wifi of the list\r\n if (wifiStatus == '8') {\r\n homeWifi += ' Enable, '\r\n enalbleDisable = '1';\r\n } else {\r\n homeWifi += ' Disable, '\r\n //enalbleDisable = '0';\r\n };*/\r\n if (wifiStatus == '8') {\r\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\r\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\r\n var imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\r\n AddValue(codeValues, \"wifi\", homeWiFi);\r\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\r\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\r\n }\r\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\r\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\r\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\r\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\r\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\r\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\r\n break;\r\n case '21': // Speed Dial Settings\r\n // [Value]:53 84 {\"call1Button\":{\"mode\":0,\"feedBack\":3,\"task\":2,\"time\":20,\"status\":1}}\r\n var status = hex2bin(value.substring(2, 3));\r\n var alertSetting = '';\r\n var enableDisable = '';\r\n if (status.substring(0, 1) == '1') {\r\n alertSetting = 'Enable, '\r\n enableDisable = '1';\r\n } else {\r\n alertSetting = 'Disable, '\r\n //enableDisable = '0';\r\n };\r\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\r\n //alertSetting += time;\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"speed\", alertSetting);\r\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\r\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\r\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\r\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\r\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\r\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\r\n break;\r\n }\r\n }\r\n }\r\n if (command == '03') {\r\n while (index < total_length + 16) {\r\n var keyLengthHex = message.substring(index, index = index + 2);\r\n var keyLength = 2 * hexToDecimal(keyLengthHex);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n debug('key = ' + key);\r\n debug('value = ' + value);\r\n switch (key) {\r\n case '01': // Device ID\r\n var imei = hex_to_ascii(value);\r\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\r\n sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n break;\r\n //CustomID is not provided so far with command type 03.. commented in the mean time\r\n /* case '03':\r\n //update customID to check if belongs to this type of device\r\n customID = value;\r\n if (value != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n } else {\r\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\r\n sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n AddValue(codeValues, \"customID\", value);\r\n general += 'customID:' + value + ',';\r\n break;\r\n }\r\n break; */\r\n case '10': // Heartbeat\r\n var heartbeat = hex_to_ascii(value);\r\n event_time = moment.utc().unix();\r\n if (index < total_length + 16) {\r\n var keyLengthHex = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLengthHex);\r\n key = message.substring(index, index = index + 2);\r\n if (key == '24') {\r\n // debug('key: ' + key) //comment those out\r\n value = message.substring(index, index = index + keyLength - 2);\r\n // debug(value)\r\n var timestampHex = value.substring(0, 8);\r\n // debug('timestampt hex: ' + timestampHex)\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n event_time = timestamp;\r\n // debug(event_time)\r\n var statusHex = changeEndianness(value.substring(8, 16));\r\n // debug(statusHex)\r\n var statusInt = hexToDecimal(statusHex);\r\n var statusDevice = '';\r\n if ((statusInt & 1) == 1) {\r\n statusDevice += 'GPS,';\r\n }\r\n if ((statusInt & 2) == 2) {\r\n statusDevice += 'WIFISource,';\r\n }\r\n if ((statusInt & 4) == 4) {\r\n statusDevice += 'CellTower,';\r\n }\r\n if ((statusInt & 8) == 8) {\r\n statusDevice += 'BLELocation,';\r\n }\r\n if ((statusInt & 16) == 16) {\r\n statusDevice += 'Charging,';\r\n }\r\n if ((statusInt & 32) == 32) {\r\n statusDevice += 'FUllyCharged,';\r\n }\r\n if ((statusInt & 64) == 64) {\r\n statusDevice += 'Reboot,';\r\n }\r\n if ((statusInt & 128) == 128) {\r\n statusDevice += 'HistoricalData,';\r\n }\r\n if ((statusInt & 256) == 256) {\r\n statusDevice += 'AGPSDataValid,';\r\n }\r\n if ((statusInt & 512) == 512) {\r\n statusDevice += 'Motion,';\r\n }\r\n if ((statusInt & 1024) == 1024) {\r\n statusDevice += 'SmartLocating,';\r\n }\r\n if ((statusInt & 2048) == 2048) {\r\n statusDevice += 'BeaconLocation,';\r\n }\r\n if ((statusInt & 4096) == 4096) {\r\n statusDevice += 'BLEConnected,';\r\n }\r\n statusDevice = statusDevice.slice(0, -1);\r\n // debug('statusHex:' + statusHex)\r\n statusHex = (statusHex);\r\n statusHex = hex2bin(statusHex);\r\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\r\n // debug(statusHex)\r\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\r\n // debug(battery_percentage)\r\n // debug(battery_percentage)\r\n // debug(statusHex.substring(8, 13))\r\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\r\n // debug(cellNetworkSignal)\r\n workMode = parseInt(statusHex.substring(13, 16), 2);\r\n // debug(workMode)\r\n general += 'statusDevice:' + statusDevice + ';';\r\n if (battery_percentage) {\r\n general += 'battery:' + battery_percentage + ';';\r\n }\r\n if (cellNetworkSignal) {\r\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\r\n }\r\n if (workMode) {\r\n general += 'workMode:' + workMode + ';';\r\n }\r\n }\r\n }\r\n // revisar\r\n var gen_location = '0';\r\n //CustomID is not provided so far with command type 03.. commented in the mean time\r\n /*if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }*/\r\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\r\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '12': // Device requesting timestamp\r\n timestamp = moment.utc().unix();\r\n timestampHex = decimalToHex(timestamp);\r\n timestampHex = changeEndianness(timestampHex);\r\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\r\n // respond to device with the timestamp of the server\r\n messageBody = messageBody + keyLengthHex + key + timestampHex;\r\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n break;\r\n case '21': //Cell Towers\r\n var mccHex = value.substring(0, 2);\r\n var mncHex = value.substring(2, 3);\r\n var mcc = hexToDecimal(mccHex);\r\n var mnc = hexToDecimal(mncHex);\r\n var numTowers = (keyLength - 4) / 5;\r\n var cellTowers = hex_to_ascii(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '22': // WIFI locations \r\n location_type = 'WIFI';\r\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\r\n //location_time = timestamp;\r\n var wifiTowers = value;\r\n general += 'wifiTowers:';\r\n var indexWifi = 0;\r\n var bssid_array = [];\r\n gen_location = '';\r\n for (let i = 0; i < numWifi; i++) {\r\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\r\n indexWifi += 14;\r\n }\r\n gen_location = gen_location.slice(0, -1);\r\n general += gen_location;\r\n //CustomID is not provided so far with command type 03\r\n /*if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }*/\r\n if (alarmCode) {\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else if (statusDevice) {\r\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else {\r\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n alarmCode = '';\r\n break;\r\n }\r\n }\r\n }\r\n if (command == '04') {\r\n while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n }\r\n }\r\n if (command == '7E') {\r\n while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n }\r\n }\r\n if (command == '7F') {\r\n // while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\r\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\r\n //}\r\n }\r\n if (command == 'FE') {\r\n while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n }\r\n }\r\n // prepare the ACK msg and change config if it is needed\r\n lengthAck = messageBody.length / 2;\r\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\r\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\r\n ////////////checksum CRC 16\r\n var checksumAck = byteStringToByteArray(messageBody);\r\n checksumAck = crc16byte(checksumAck);\r\n checksumAck = decimalToHex(checksumAck);\r\n checksumAck = ('0000' + checksumAck).slice(-4);\r\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\r\n prefix = prefix + lengthAck + checksumAck + sequenceID;\r\n // To send ACK to the device previous to internal msg with parts\r\n if (needsAck == true) {\r\n if (messageBody.length <= 2) {\r\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\r\n } else {\r\n ack = prefix + messageBody;\r\n }\r\n AddValue(codeValues, 'imei', imei);\r\n AddValue(codeValues, 'ack', ack);\r\n }\r\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \r\n AddValue(codeValues, \"error\", \"checksum failed for message\");\r\n AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\r\n if (i >= 0) {\r\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\r\n AddValue(codeValues, \"imei\", imei);\r\n }\r\n }\r\n }\r\n\r\n function ascii_to_hexa(str) { // ascii to hex \r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n }\r\n\r\n function byteStringToByteArray(str) { //\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n }\r\n\r\n function changeEndianness(string) { //\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n }\r\n\r\n function hex2bin(hex) { //\r\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\r\n }\r\n\r\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\r\n var checksum = byteStringToByteArray(payloadData);\r\n checksum = crc16byte(checksum);\r\n checksum = decimalToHex(checksum);\r\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\r\n return changeEndianness(checksum);\r\n }\r\n\r\n function crc16byte(s) { //\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n }\r\n\r\n function debug(str) { // write debug info to console log, if localTesting\r\n if (localTesting === \"True\") {\r\n console.log(str);\r\n }\r\n }\r\n\r\n function decimalToHex(x) { // decimal to hex\r\n x = x.toString(16).toUpperCase();\r\n return x;\r\n }\r\n\r\n function hex_to_ascii(str1) { // Hex to Ascii \r\n var hex = str1.toString();\r\n var str = '';\r\n for (var n = 0; n < hex.length; n += 2) {\r\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\r\n }\r\n return str;\r\n }\r\n\r\n function hexToDecimalSigned(hex) { // hex to decimal\r\n if (hex.length % 2 != 0) {\r\n hex = \"0\" + hex;\r\n }\r\n var num = parseInt(hex, 16);\r\n var maxVal = Math.pow(2, hex.length / 2 * 8);\r\n if (num > maxVal / 2 - 1) {\r\n num = num - maxVal;\r\n }\r\n return num;\r\n }\r\n\r\n function hexToDecimal(x) {\r\n x = parseInt(x, 16);\r\n return x;\r\n }\r\n\r\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\r\n var server;\r\n if (localTesting) {\r\n console.log('local testing - sending to acceptance server the message ... ');\r\n console.log(str);\r\n server = '52.174.17.77';\r\n } else {\r\n server = '127.0.0.1';\r\n }\r\n var c = net.createConnection(5678, server);\r\n c.on('error', function(error) {\r\n c = net.createConnection(5678, server);\r\n });\r\n c.write(`${str}`);\r\n c.end();\r\n }\r\n // modify to return the object that contains your data\r\n return dataToReceiver;\r\n}\r\n// params is not defined locally -> export as module\r\nif (typeof(params) === 'undefined') {\r\n module.exports = {\r\n execute_ops\r\n }\r\n} else { // on server use local defined vars\r\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\r\n // define global returns\r\n msg = return_values;\r\n}","Type":0,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, configIds.SpeedDialSettings.EnableDisableSpeedDial);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734423608},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, '1');\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configIds.SpeedDialSettings.EnableDisableSpeedDial\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734424064},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var enablePhone = hex2bin(value.substring(0, 1)).substring(0, 1);\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enablePhone);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configIds.SpeedDialSettings.EnableDisableSpeedDial\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734461682},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734462462},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, ';\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, ';\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734463709},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, ';\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734463932},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734520814},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734521810},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734522292},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data to kibana\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n /*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);*/\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function sendDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n console.log(dataToReceiver);\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742549373},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data to kibana\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n /*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);*/\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function sendDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n console.log(dataToReceiver);\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742550263},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n const port = 5878; //Protocol-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742635144},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742645392},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n event_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n //event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n const port = '5878'; //Protocol-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742648212},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n event_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n //event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5878, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5878, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n /*\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n const port = '5878'; //Protocol-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n } \\r\\n */\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742648816},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Juanmi Navarro\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 22/03/2025\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n event_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n //event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n /*\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5878, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5878, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }*/\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n const port = '5678'; //acceptance-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }*/\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742649832},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Juanmi Navarro\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 22/03/2025\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n event_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n //event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n /*\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5878, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5878, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }*/\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n const port = '5678'; //acceptance-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742649962},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n ///////////////////////////////////////////////////////////////////////////////\\n //\\n // Roam protocol - please see variables and typical values in order below\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\n //\\n // Author: Juanmi Navarro\\n // Created: 01/01/0000\\n // Last modified: 22/03/2025\\n //\\n ///////////////////////////////////////////////////////////////////////////////\\n if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n }\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n ];\\n var codeValues = [];\\n AddValue(codeValues, 'protocol_template', 'Roam');\\n AddValue(codeValues, 'product', serverParams.ProductName);\\n var dataToReceiver = [];\\n var configsToAck = [];\\n var configsToUpdate = [];\\n var configsToSend = [];\\n if (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n AddValue(codeValues, 'rawMsg', raw);\\n //general SMS message\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n return;\\n }\\n AddValue(codeValues, 'raw', raw);\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\n var homeBeacon = '';\\n var homeWiFi = '';\\n var contacts = '';\\n var gps_data = '';\\n var wifi_data = '';\\n var status_data = '';\\n var lbs_data = '';\\n var beacon_data = '';\\n var ble_data = '';\\n var smart_data = '';\\n //parse header & properties\\n var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n var lengthLittleEndian = message.substring(4, 8);\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\n var messageForReceiver;\\n var sequenceID = message.substring(12, 16);\\n var command = message.substring(16, 18);\\n var index = 18;\\n var prefix = 'AB' + '00';\\n var lengthAck = 0;\\n var ack = '';\\n var needsAck = false;\\n var hasConfigs = false;\\n var general = '';\\n var timestamp = '';\\n var info = '';\\n var customID = '';\\n latitude = 0;\\n longitude = 0;\\n location_accuracy = 0; // GPS location adds the accuracy\\n location_time = event_time = '';\\n speed = 0.0;\\n var location_type = '0';\\n //var gen_location = '0'; \\n var i; // general loop counter\\n var battery_percentage = '';\\n var cellNetworkSignal = '';\\n var workMode = '';\\n //mask bitwise (properties should be '10')\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\n needsAck = true;\\n }\\n // Loop to decode multi-ACK msg\\n if (message.includes('AB00030008C7')) {\\n const multiack = message.split('AB00');\\n for (let i = 1; i < multiack.length; i++) {\\n message = 'AB00' + multiack[i];\\n debug(message);\\n decoder(message);\\n } // FOR multiACK\\n } else decoder(message); // IF multiACK\\n } else if (oystaTemplate == 'True') { // Oysta Template \\n AddValue(codeValues, 'rawMsg', raw);\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\n var gen_location = params.gps_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var location_accuracy = gen_location[2];\\n var speed = gen_location[3];\\n var direction = gen_location[4];\\n var altitude = gen_location[5];\\n var satellites = gen_location[6];\\n var mileage = gen_location[7];\\n if (location_accuracy !== 0) {\\n var fix_state = 1;\\n } else {\\n var fix_state = 0;\\n }\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n AddValue(codeValues, 'speed', speed);\\n AddValue(codeValues, 'direction', direction);\\n AddValue(codeValues, 'altitude', altitude);\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\n AddValue(codeValues, 'mileage', mileage);\\n AddValue(codeValues, 'satellites', satellites);\\n AddValue(codeValues, 'fix_state', fix_state);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\n var variables = []; //Define array\\n variables = params.lbs_data.split(',');\\n var index = 2;\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\n AddValue(codeValues, 'mcc', variables[0]);\\n AddValue(codeValues, 'mnc', variables[1]);\\n AddValue(codeValues, 'lac', variables[index]);\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\n }\\n index += 3;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\n var bssid_array = params.wifi_data.split(',');\\n var index = 0;\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\n }\\n index += 2;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n // when Beacon is detected and it isn't flic BLE detected\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\n var gen_location = params.beacon_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var mac = gen_location[2];\\n var label = gen_location[3];\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac) {\\n AddValue(codeValues, 'beacon_mac', mac);\\n var simpleQuery = [{\\n 'code': 'Mac',\\n 'value': mac,\\n }];\\n var simpleQueryLabel = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery\\n };\\n var labels = [];\\n labels.push(JSON.stringify(simpleQueryLabel));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\n var gen_location = params.ble_data.split(',');\\n var flag = gen_location[0];\\n var batLevel = gen_location[1];\\n var mac2 = gen_location[2];\\n //var label = gen_location[3];\\n AddValue(codeValues, 'flagBLE', flag);\\n AddValue(codeValues, 'batBLE', batLevel);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac2) {\\n AddValue(codeValues, 'beacon_mac', mac2);\\n var simpleQuery2 = [{\\n 'code': 'Mac',\\n 'value': mac2,\\n }];\\n var simpleQueryLabel2 = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery2\\n };\\n var labels2 = [];\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n /* meter mas tarde... \\n if (params.smart_data !== 'undefined') {\\n var gen_location = params.smart_data.split(',')\\n var latitude = gen_location[0]\\n var longitude = gen_location[1]\\n var location_accuracy = gen_location[2]\\n var altitude = gen_location[3]\\n AddValue(codeValues,'latitude', latitude);\\n AddValue(codeValues,'longitude', longitude);\\n AddValue(codeValues,'altitude', altitude);\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\n }\\n */\\n /*else if ((params.event_time) && (params.event_time == '')) {\\n var event_time = moment.utc().unix();\\n AddValue(codeValues,'event_time', event_time);\\n } revisar mas adelante*/\\n // to parse SMS info from the device\\n switch (messageTypeLocalCode) {\\n case 'COMM-SMS': // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\n } else if (params.data.startsWith('flush ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('Set Roam-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('set live tracking')) {\\n configsToAck.push(configIds.Controls.Trace);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.Controls.Reboot);\\n } else if (params.data.startsWith('GPS')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n var i1 = params.data.search('Now:')\\n var i2 = params.data.search('Loc Time:')\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(i2 + 9, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\n //var i1 = params.data.search('IMEI:')\\n //var i2 = params.data.search('GSM signal quality:')\\n var i3 = params.data.search('Software version:')\\n var sub = params.data.substring(i3 + 17, params.data.length)\\n var i4 = sub.search('version:');\\n var fwVersion = sub.substring(i4, sub.length);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\n var i1 = params.data.search('Fall alarm:');\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\n var i2 = params.data.search('level:');\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\n break;\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\n var i1 = raw.search('1,');\\n //var i2 = params.data.search('2,');\\n //var homeBeacon = params.data.substring(i1+2, i2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = raw.search('A1:');\\n if (raw.includes('A2:')) {\\n var i2 = raw.search('A2:');\\n } else {\\n var i2 = raw.search('A10:');\\n }\\n var tel = raw.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n i2 = raw.search('A10:')\\n tel = raw.substring(i2 + 4, raw.length);\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = params.data.search('APN:')\\n var i2 = params.data.search('IP:')\\n var i3 = params.data.search('Move')\\n var apn = params.data.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n var serverDetails = params.data.substring(i2 + 3, i3);\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(0, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n }\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\n var event_time = moment.utc().unix();\\n AddValue(codeValues, 'event_time', event_time);\\n }\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\n // var location_time = moment.utc().unix();\\n // AddValue(codeValues, 'location_time', location_time);\\n //}\\n }\\n // send data msg to kibana\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n console.log(data);\\n return data\\n // end of main operation\\n // define functions used in operation\\n // decode global msg\\n function decoder(str) { // decode rawdata\\n // CARE Decoder\\n AddValue(codeValues, 'Message : ', str);\\n var message = str;\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\n var checksum = message.substring(8, 12);\\n var messageBody = message.substring(16, message.length);\\n debug('message =' + message);\\n debug('checksum =' + checksum);\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\n debug(\\\"message has valid checksum\\\");\\n var messageBody = command; // update value for the ACK\\n debug('command =' + command);\\n if (command == '01') {\\n while (index < total_length + 16) {\\n // gen_location = '0'; //cambiado 30/09\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n //Device ID\\n case '01':\\n var imei = hexToAscii(value);\\n break;\\n //Alarm code\\n case '02':\\n var alarm = 'CYC';\\n var alarmCode = value.substring(0, 8);\\n alarmCode = changeEndianness(alarmCode);\\n var timestampHex = value.substring(8, 16);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n var alarmCodeInt = hexToDecimal(alarmCode);\\n var alarmCodeExt = value.substring(16, 24);\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\n //Extended Alerts\\n // Fall off\\n if ((alarmCodeExtInt & 1) == 1) {\\n var alarm = 'ALF-C';\\n }\\n // Welfare Check-out\\n else if ((alarmCodeExtInt & 2) == 2) {\\n var alarm = 'ALA-C';\\n }\\n // Standard Alerts\\n //Battery low\\n else if ((alarmCodeInt & 1) == 1) {\\n var alarm = 'BATL';\\n }\\n //Overspeed\\n else if ((alarmCodeInt & 2) == 2) {\\n var alarm = 'ALSP';\\n }\\n //Fall\\n else if ((alarmCodeInt & 4) == 4) {\\n var alarm = 'ALF';\\n }\\n //Tilt\\n else if ((alarmCodeInt & 8) == 8) {\\n var alarm = 'Tilt';\\n } else if ((alarmCodeInt & 16) == 16) {\\n if ((alarmCodeInt & 16777216) == 16777216) {\\n var alarm = 'Geo1-IN';\\n } else {\\n var alarm = 'Geo1-OUT';\\n }\\n } else if ((alarmCodeInt & 32) == 32) {\\n if ((alarmCodeInt & 33554432) == 33554432) {\\n var alarm = 'Geo2-IN';\\n } else {\\n var alarm = 'Geo2-OUT';\\n }\\n } else if ((alarmCodeInt & 64) == 64) {\\n if ((alarmCodeInt & 67108864) == 67108864) {\\n var alarm = 'Geo3-IN';\\n } else {\\n var alarm = 'Geo3-OUT';\\n }\\n } else if ((alarmCodeInt & 128) == 128) {\\n if ((alarmCodeInt & 134217728) == 134217728) {\\n var alarm = 'Geo4-IN';\\n } else {\\n var alarm = 'Geo4-OUT';\\n }\\n }\\n //Power Off\\n else if ((alarmCodeInt & 256) == 256) {\\n var alarm = 'PWRF';\\n }\\n //Power On\\n else if ((alarmCodeInt & 512) == 512) {\\n var alarm = 'PWRN';\\n }\\n //Motion\\n else if ((alarmCodeInt & 1024) == 1024) {\\n var alarm = 'ALMOV';\\n }\\n //No Motion\\n else if ((alarmCodeInt & 2048) == 2048) {\\n var alarm = 'ALNM';\\n }\\n //SOS\\n else if ((alarmCodeInt & 4096) == 4096) {\\n var alarm = 'ALSOS';\\n } else if ((alarmCodeInt & 8192) == 8192) {\\n var alarm = 'Side1';\\n } else if ((alarmCodeInt & 16384) == 16384) {\\n var alarm = 'Side2';\\n }\\n //Battery charging\\n else if ((alarmCodeInt & 32768) == 32768) {\\n var alarm = 'BATCN';\\n }\\n //Battery no charging\\n else if ((alarmCodeInt & 65536) == 65536) {\\n var alarm = 'BATCF';\\n }\\n //SOS Ending\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\n else if ((alarmCodeInt & 131072) == 131072) {\\n var alarm = 'SOSEnding';\\n info = 'Alarm Finished';\\n }\\n //Amber Alert EC03 only\\n else if ((alarmCodeInt & 262144) == 262144) {\\n var alarm = 'ALAO';\\n }\\n // welfare Alert check-in ALA-O\\n else if ((alarmCodeInt & 524288) == 524288) {\\n var alarm = 'ALA-O';\\n }\\n // Amber alert Ending ALA-C\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\n var alarm = 'ALA-C';\\n }\\n // Amber alert Ending ALA-C\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\n // var alarm = 'ALA-C';\\n //}\\n // Fall-Down Alert ending\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\n var alarm = 'ALF-C';\\n }\\n // welfare Alert Ending ALA\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\n var alarm = 'ALA';\\n }\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\n // var alarm = 'BEA';\\n //}\\n general += 'alarm:' + alarm + ',';\\n break;\\n //Custom ID\\n case '03':\\n // in value is customID.... '06' for Watch Care\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // exit decoder\\n // const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n // console.log(data);\\n return // data\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n //Historical Data Completed\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\n var histData = true;\\n break;\\n //GPS location\\n case '20':\\n location_type = 'GPS';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var speedHex = value.substring(16, 20);\\n var directionHex = value.substring(20, 24);\\n var altitudeHex = value.substring(24, 28);\\n var location_accuracyHex = value.substring(28, 32);\\n var mileageHex = value.substring(32, 40);\\n var satellitesHex = value.substring(40, 42);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\n var direction = hexToDecimal(changeEndianness(directionHex));\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n // Range: 0.5 to 99.9 \\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\n var satellites = hexToDecimal(satellitesHex);\\n // location_time = timestamp;\\n //<>,<>,<>,<>,<>\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //WIFI Towers\\n case '22':\\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n wifi_data = '';\\n for (let i = 0; i < numWifi; i++) {\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n wifi_data = wifi_data.slice(0, -1);\\n general += wifi_data;\\n break;\\n //BLE Location Added 10/10/22\\n case '23':\\n location_type = 'BLE';\\n var mac = value.substring(0, 12);\\n var latitudeHex = value.substring(12, 20);\\n var longitudeHex = value.substring(20, 28);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var address = hexToAscii(value.substring(28, value.length));\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n // location_time = timestamp;\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //General Data , status_data\\n case '24':\\n //var general = 'true'\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n }\\n //else {\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\n //}\\n // reset variables\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n location_time = timestamp;\\n event_time = timestamp;\\n // HardCode to fix possible issue in protocol\\n //event_time = moment.utc().unix();\\n // end of hard code\\n var statusHex = changeEndianness(value.substring(8, 16));\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n //params.BatteryStatus.BatteryStatus = '1';\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n // var alarm = 'BATCN';\\n //configs.BatteryStatus.BatteryStatus = '1';\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\n hasConfigs = true;\\n var batteryStatus = '1';\\n var alarm = 'BATCN';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n //var alarm = 'BATF';\\n // configs.BatteryStatus.BatteryStatus = '3';\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\n hasConfigs = true;\\n var batteryStatus = '3';\\n var alarm = 'BATF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\n statusDevice += 'Not Charging,';\\n var alarm = 'BATCF';\\n //configs.BatteryStatus.BatteryStatus = '2';\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\n var batteryStatus = '2';\\n var alarm = 'BATCF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }\\n }*/\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) { //isHome\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n if ((statusInt & 16384) == 16384) {\\n statusDevice += 'HomeWiFi,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n //statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n general += 'statusDevice:' + statusDevice + ',';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ',';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ',';\\n }\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\n break;\\n //Call Records\\n case '25':\\n //Needed?\\n break;\\n //BLE Location 2\\n case '26':\\n //I don't understand\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Smart Location\\n case '27':\\n location_type = 'SMART';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var location_accuracyHex = value.substring(16, 20);\\n var altitudeHex = value.substring(20, 24);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //location_time = timestamp;\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //Beacon Location Added 11/10/22\\n case '28':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n descr = hexToAscii(value.substring(34, value.length));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n // var latitudeHex = value.substring(18, 26);\\n // var longitudeHex = value.substring(26, 34);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\n break;\\n // Beacon V2\\n case '2C':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(20, 28);\\n longitudeHex = value.substring(28, 36);\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\n break;\\n //Cell Towers Note\\n case '29':\\n location_type = 'LBS';\\n lbs_data = '';\\n var mccHex = changeEndianness(value.substring(0, 4));\\n var mncHex = value.substring(4, 6);\\n var mcc = hexToDecimal(mccHex);\\n lbs_data += mcc + ',';\\n var mnc = hexToDecimal(mncHex);\\n lbs_data += mnc + ',';\\n var indexLbs = 6;\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\n for (let i = 0; i < numTowers; i++) {\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\n var rxl = hexToDecimal(rxlHex);\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\n var lac = hexToDecimal(lacHex);\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\n indexLbs += 14;\\n }\\n lbs_data = lbs_data.slice(0, -1);\\n general += lbs_data;\\n break;\\n case '30':\\n //G-sensor. \\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numStep = (keyLength - 2) / 16;\\n for (let j = 0; j < numStep; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var stepHex = value.substring(8, 16);\\n stepHex = changeEndianness(stepHex);\\n var stepRate = hexToDecimal(stepHex);\\n info = stepRate;\\n //var alarmCode = 'True';\\n var alarm = 'STP';\\n general += ' step counting' + j + ':' + stepRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //Activity\\n case '31':\\n //I don't understand\\n break;\\n //BLE MAC list\\n case '32':\\n //I don't understand\\n break;\\n //Beacon List\\n case '33':\\n //I don't understand\\n break;\\n //Heart Rate Data\\n case '40':\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numHeartRate = (keyLength - 2) / 12;\\n for (let j = 0; j < numHeartRate; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var heartRateHex = value.substring(8, 10);\\n var heartRate = hexToDecimal(heartRateHex);\\n var trustLevelHex = value.substring(10, 12);\\n var trustLevel = hexToDecimal(trustLevelHex);\\n info = heartRate;\\n //var alarmCode = 'True';\\n var alarm = 'HRT';\\n general += ' heart rate' + j + ':' + heartRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //BLE Connected . For Flic button\\n case '62':\\n location_type = 'BLE';\\n //var alarm = 'EBZI'; \\n //var latitudeHex = '00';\\n //var longitudeHex = '00';\\n //var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\n //location_time = timestamp;\\n ble_data = `${flag},${batLevel},${mac}`;\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\n break;\\n }\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n /*else if (alarm === 'HRT') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (alarm === 'STP') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }*/\\n // rest the alarm value\\n alarm = '';\\n }\\n if (command == '02') {\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n switch (key) {\\n //Module Number\\n case '01':\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Firmware version\\n case '02':\\n //no ACK need\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersion = hexToAscii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\n // harcode to avoid conflicts with Rio protocol\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\n // return\\n //}\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //ICCID\\n case '04':\\n var iccid = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //BLE-MAC\\n case '05':\\n var bleMac = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Run Time\\n case '07':\\n var runTime = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '10': // Ringer Volume\\n var volume = hexToDecimal(value);\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"Volume\\\", volume);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\n break;\\n case '0A': //Performance mode\\n //var workMode = hexToDecimal(value);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n //var workMode = hexToDecimal(value);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n var workMode = 1234; // + value + \\\"end\\\";\\n //var workModeVal = 9;\\n //workMode = 'test10';\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n break;\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1F':\\n //System Language\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n //messageBody = messageBody + keyLengthHex + key + value;\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\n break;\\n case '33': // phone option\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\n var auto = 'true';\\n } else var auto = 'false';\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\n allow = 'true';\\n } else var allow = 'false';\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\n break;\\n case '30': //ContactList\\n var contactNumber = value.substring(1, 2);\\n var telLength = hexToDecimal(value.substring(2, 4));\\n var tel = '';\\n switch (contactNumber) {\\n // Emergency Number\\n case '0':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n break;\\n // Speed Dial Number\\n case '1':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\n break;\\n // Gateway Number\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\n tel = 'Esendex UK'\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\n tel = 'Esendex Spain'\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\n tel = 'Esendex UK Acceptance'\\n } else {\\n tel = 'Default'\\n }\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n break;\\n default:\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.length < 6) {\\n contacts += '';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\n contacts += tel + ', ';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n break;\\n case '40': // APN\\n //no ACK need\\n var apn = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n break;\\n case '41': // APN Username\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n break;\\n case '42': // APN Password\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n break;\\n case '43': //Server Details\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\n if (serverDetails.includes('52.232.85.255:5678')) {\\n serverDetails = 'Production'\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\n serverDetails = 'Acceptance'\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\n serverDetails = 'Protocol-Import'\\n } else {\\n serverDetails = 'Default'\\n }\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n break;\\n case '44': //time interval - work mode intervals\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n var workMode = 0;\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\n //workMode = 'High Frequency';\\n workMode = 3;\\n }\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\n //workMode = 'Balanced';\\n workMode = 2;\\n }\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\n //workMode = 'Power Saving';\\n workMode = 1;\\n }\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\n //workMode = 'No Reporting';\\n workMode = 0;\\n }\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '47': // Custom Id\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"customeid\\\", value);\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\n configsToAck.push(configIds.ReadState.CustomId);\\n break;\\n case '53': // Non motion alert\\n //2B020080\\n var status = hexToBin(value.substring(6, 8));\\n var alertSetting = '';\\n var enableDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enableDisable = '1';\\n } else {\\n alertSetting = 'Disable, '\\n };\\n //if (status.substring(5, 6) == '1') {\\n // alertSetting += 'Dial, '\\n //} else {\\n // alertSetting += 'No Dial, '\\n //};\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n case '56': //Fall down sensibility\\n // '00001100'\\n var fallStatus = hexToBin(value.substring(0, 2));\\n var enalbleDisable = '';\\n //if (fallStatus.substring(4, 5) == '1') {\\n if (fallStatus.substring(0, 1) == '1') {\\n var sensibility = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n var sensibility = 'Disable, '\\n };\\n if (fallStatus.substring(5, 6) == '1') {\\n sensibility += 'Dial, '\\n } else {\\n sensibility += 'No Dial, '\\n };\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\n sensibility += sesibityOptionValue;\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\n break;\\n case '73': //BeaconList\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\n var beaconStatus = hexToBin(value.substring(0, 1));\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\n homeBeacon += beaconStatus + ', ';\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case '4A': //Wifi Network List\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\n var wifiStatus = value.substring(0, 1);\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\n /var homeWifi = '';\\n if (wifiIndex == '0') { // Only first Wifi of the list\\n if (wifiStatus == '8') {\\n homeWifi += ' Enable, '\\n enalbleDisable = '1';\\n } else {\\n homeWifi += ' Disable, '\\n //enalbleDisable = '0';\\n };*/\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n }\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\n break;\\n case '21': // Speed Dial Settings\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\n var alertSetting = '';\\n var enalbleDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n alertSetting = 'Disable, '\\n //enableDisable = '0';\\n };\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n //alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n }\\n }\\n }\\n if (command == '03') {\\n while (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n case '01': // Device ID\\n var imei = hexToAscii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n break;\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /* case '03':\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n break; */\\n case '10': // Heartbeat\\n var heartbeat = hexToAscii(value);\\n event_time = moment.utc().unix();\\n if (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\n key = message.substring(index, index = index + 2);\\n if (key == '24') {\\n // debug('key: ' + key) //comment those out\\n value = message.substring(index, index = index + keyLength - 2);\\n // debug(value)\\n var timestampHex = value.substring(0, 8);\\n // debug('timestampt hex: ' + timestampHex)\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n // debug(event_time)\\n var statusHex = changeEndianness(value.substring(8, 16));\\n // debug(statusHex)\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n }\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n // debug('statusHex:' + statusHex)\\n statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n // debug(statusHex)\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n // debug(battery_percentage)\\n // debug(battery_percentage)\\n // debug(statusHex.substring(8, 13))\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n // debug(cellNetworkSignal)\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n // debug(workMode)\\n general += 'statusDevice:' + statusDevice + ';';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ';';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ';';\\n }\\n }\\n }\\n // revisar\\n var gen_location = '0';\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '12': // Device requesting timestamp\\n timestamp = moment.utc().unix();\\n timestampHex = decimalToHex(timestamp);\\n timestampHex = changeEndianness(timestampHex);\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n // respond to device with the timestamp of the server\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '21': //Cell Towers\\n var mccHex = value.substring(0, 2);\\n var mncHex = value.substring(2, 3);\\n var mcc = hexToDecimal(mccHex);\\n var mnc = hexToDecimal(mncHex);\\n var numTowers = (keyLength - 4) / 5;\\n var cellTowers = hexToAscii(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '22': // WIFI locations \\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n gen_location = '';\\n for (let i = 0; i < numWifi; i++) {\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n gen_location = gen_location.slice(0, -1);\\n general += gen_location;\\n //CustomID is not provided so far with command type 03\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n alarmCode = '';\\n break;\\n }\\n }\\n }\\n if (command == '04') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7E') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7F') {\\n // while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\n //}\\n }\\n if (command == 'FE') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n // prepare the ACK msg and change config if it is needed\\n lengthAck = messageBody.length / 2;\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\n ////////////checksum CRC 16\\n var checksumAck = byteStringToByteArray(messageBody);\\n checksumAck = crc16byte(checksumAck);\\n checksumAck = decimalToHex(checksumAck);\\n checksumAck = ('0000' + checksumAck).slice(-4);\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\n // To send ACK to the device previous to internal msg with parts\\n if (needsAck == true) {\\n if (messageBody.length <= 2) {\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\n } else {\\n ack = prefix + messageBody;\\n }\\n AddValue(codeValues, 'imei', imei);\\n AddValue(codeValues, 'ack', ack);\\n }\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\n if (i >= 0) {\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n }\\n // Auxiliary functions\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\n const dataToReceiver = {\\n values: codeValues\\n };\\n if (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck;\\n }\\n if (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate;\\n }\\n if (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend;\\n }\\n return dataToReceiver;\\n }\\n\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n codeValueArray.push(cvpair);\\n }\\n // convert functions\\n function asciiToHex(str) { // ascii to hex \\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\n }\\n\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\n const bytes = [];\\n for (let i = 0; i < str.length; i += 2) {\\n const byte = parseInt(str.substring(i, i + 2), 16);\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\n bytes.push(byte);\\n }\\n }\\n return bytes;\\n }\\n\\n function decimalToHex(x) {\\n return Number(x).toString(16).toUpperCase();\\n }\\n\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\n const bin = parseInt(hex, 16).toString(2);\\n return bin.padStart(hex.length * 4, '0');\\n }\\n\\n function hexToAscii(hex) {\\n if (hex.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\n }\\n\\n function hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 !== 0) {\\n hex = '0' + hex;\\n }\\n const num = parseInt(hex, 16);\\n const bits = hex.length * 4;\\n const maxVal = 2 ** bits;\\n return num >= maxVal / 2 ? num - maxVal : num;\\n }\\n\\n function hexToDecimal(hex) {\\n return parseInt(hex, 16);\\n }\\n // CheckSum and debug functions\\n function changeEndianness(hexString) { // changeEndianness\\n if (hexString.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\n .reverse() // invierte el orden\\n .join('');\\n }\\n\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\n const bytes = byteStringToByteArray(payloadData);\\n const crc = crc16byte(bytes);\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\n return changeEndianness(hex);\\n }\\n\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\n let crc = 0x0000;\\n for (const byte of byteArray) {\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\n }\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[index] ^ (crc << 8);\\n }\\n return crc & 0xFFFF;\\n }\\n\\n function debug(...args) { // write debug info to console log, if localTesting\\n if (localTesting) {\\n console.debug('[DEBUG]', ...args);\\n }\\n }\\n /*\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting) {\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5878, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5878, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n }*/\\n function sendMessageToLocalhostNoWait(message) {\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\n const port = '5678'; //acceptance-dev\\n if (localTesting) {\\n console.debug('[DEBUG] Sending message to test server:', message);\\n }\\n const client = net.createConnection(port, server, () => {\\n client.write(message);\\n client.end();\\n });\\n client.on('error', (err) => {\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\n });\\n client.on('end', () => {\\n if (localTesting) {\\n console.debug('[DEBUG] Connection closed');\\n }\\n });\\n }\\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, net, 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":1744112746},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n ///////////////////////////////////////////////////////////////////////////////\\n //\\n // Roam protocol - please see variables and typical values in order below\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\n //\\n // Author: Juanmi Navarro\\n // Created: 01/01/0000\\n // Last modified: 22/03/2025\\n //\\n ///////////////////////////////////////////////////////////////////////////////\\n if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n }\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n ];\\n var codeValues = [];\\n AddValue(codeValues, 'protocol_template', 'Roam');\\n AddValue(codeValues, 'product', serverParams.ProductName);\\n var dataToReceiver = [];\\n var configsToAck = [];\\n var configsToUpdate = [];\\n var configsToSend = [];\\n if (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n AddValue(codeValues, 'rawMsg', raw);\\n //general SMS message\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n return;\\n }\\n AddValue(codeValues, 'raw', raw);\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\n var homeBeacon = '';\\n var homeWiFi = '';\\n var contacts = '';\\n var gps_data = '';\\n var wifi_data = '';\\n var status_data = '';\\n var lbs_data = '';\\n var beacon_data = '';\\n var ble_data = '';\\n var smart_data = '';\\n //parse header & properties\\n var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n var lengthLittleEndian = message.substring(4, 8);\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\n var messageForReceiver;\\n var sequenceID = message.substring(12, 16);\\n var command = message.substring(16, 18);\\n var index = 18;\\n var prefix = 'AB' + '00';\\n var lengthAck = 0;\\n var ack = '';\\n var needsAck = false;\\n var hasConfigs = false;\\n var general = '';\\n var timestamp = '';\\n var info = '';\\n var customID = '';\\n latitude = 0;\\n longitude = 0;\\n location_accuracy = 0; // GPS location adds the accuracy\\n location_time = event_time = '';\\n speed = 0.0;\\n var location_type = '0';\\n //var gen_location = '0'; \\n var i; // general loop counter\\n var battery_percentage = '';\\n var cellNetworkSignal = '';\\n var workMode = '';\\n //mask bitwise (properties should be '10')\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\n needsAck = true;\\n }\\n // Loop to decode multi-ACK msg\\n if (message.includes('AB00030008C7')) {\\n const multiack = message.split('AB00');\\n for (let i = 1; i < multiack.length; i++) {\\n message = 'AB00' + multiack[i];\\n debug(message);\\n decoder(message);\\n } // FOR multiACK\\n } else decoder(message); // IF multiACK\\n } else if (oystaTemplate == 'True') { // Oysta Template \\n AddValue(codeValues, 'rawMsg', raw);\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\n var gen_location = params.gps_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var location_accuracy = gen_location[2];\\n var speed = gen_location[3];\\n var direction = gen_location[4];\\n var altitude = gen_location[5];\\n var satellites = gen_location[6];\\n var mileage = gen_location[7];\\n if (location_accuracy !== 0) {\\n var fix_state = 1;\\n } else {\\n var fix_state = 0;\\n }\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n AddValue(codeValues, 'speed', speed);\\n AddValue(codeValues, 'direction', direction);\\n AddValue(codeValues, 'altitude', altitude);\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\n AddValue(codeValues, 'mileage', mileage);\\n AddValue(codeValues, 'satellites', satellites);\\n AddValue(codeValues, 'fix_state', fix_state);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\n var variables = []; //Define array\\n variables = params.lbs_data.split(',');\\n var index = 2;\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\n AddValue(codeValues, 'mcc', variables[0]);\\n AddValue(codeValues, 'mnc', variables[1]);\\n AddValue(codeValues, 'lac', variables[index]);\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\n }\\n index += 3;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\n var bssid_array = params.wifi_data.split(',');\\n var index = 0;\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\n }\\n index += 2;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n // when Beacon is detected and it isn't flic BLE detected\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\n var gen_location = params.beacon_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var mac = gen_location[2];\\n var label = gen_location[3];\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac) {\\n AddValue(codeValues, 'beacon_mac', mac);\\n var simpleQuery = [{\\n 'code': 'Mac',\\n 'value': mac,\\n }];\\n var simpleQueryLabel = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery\\n };\\n var labels = [];\\n labels.push(JSON.stringify(simpleQueryLabel));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\n var gen_location = params.ble_data.split(',');\\n var flag = gen_location[0];\\n var batLevel = gen_location[1];\\n var mac2 = gen_location[2];\\n //var label = gen_location[3];\\n AddValue(codeValues, 'flagBLE', flag);\\n AddValue(codeValues, 'batBLE', batLevel);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac2) {\\n AddValue(codeValues, 'beacon_mac', mac2);\\n var simpleQuery2 = [{\\n 'code': 'Mac',\\n 'value': mac2,\\n }];\\n var simpleQueryLabel2 = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery2\\n };\\n var labels2 = [];\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n /* meter mas tarde... \\n if (params.smart_data !== 'undefined') {\\n var gen_location = params.smart_data.split(',')\\n var latitude = gen_location[0]\\n var longitude = gen_location[1]\\n var location_accuracy = gen_location[2]\\n var altitude = gen_location[3]\\n AddValue(codeValues,'latitude', latitude);\\n AddValue(codeValues,'longitude', longitude);\\n AddValue(codeValues,'altitude', altitude);\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\n }\\n */\\n /*else if ((params.event_time) && (params.event_time == '')) {\\n var event_time = moment.utc().unix();\\n AddValue(codeValues,'event_time', event_time);\\n } revisar mas adelante*/\\n // to parse SMS info from the device\\n switch (messageTypeLocalCode) {\\n case 'COMM-SMS': // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\n } else if (params.data.startsWith('flush ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('Set Roam-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('set live tracking')) {\\n configsToAck.push(configIds.Controls.Trace);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.Controls.Reboot);\\n } else if (params.data.startsWith('GPS')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n var i1 = params.data.search('Now:')\\n var i2 = params.data.search('Loc Time:')\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(i2 + 9, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\n //var i1 = params.data.search('IMEI:')\\n //var i2 = params.data.search('GSM signal quality:')\\n var i3 = params.data.search('Software version:')\\n var sub = params.data.substring(i3 + 17, params.data.length)\\n var i4 = sub.search('version:');\\n var fwVersion = sub.substring(i4, sub.length);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\n var i1 = params.data.search('Fall alarm:');\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\n var i2 = params.data.search('level:');\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\n break;\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\n var i1 = raw.search('1,');\\n //var i2 = params.data.search('2,');\\n //var homeBeacon = params.data.substring(i1+2, i2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = raw.search('A1:');\\n if (raw.includes('A2:')) {\\n var i2 = raw.search('A2:');\\n } else {\\n var i2 = raw.search('A10:');\\n }\\n var tel = raw.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n i2 = raw.search('A10:')\\n tel = raw.substring(i2 + 4, raw.length);\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = params.data.search('APN:')\\n var i2 = params.data.search('IP:')\\n var i3 = params.data.search('Move')\\n var apn = params.data.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n var serverDetails = params.data.substring(i2 + 3, i3);\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(0, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n }\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\n var event_time = moment.utc().unix();\\n AddValue(codeValues, 'event_time', event_time);\\n }\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\n // var location_time = moment.utc().unix();\\n // AddValue(codeValues, 'location_time', location_time);\\n //}\\n }\\n // send data msg to kibana\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n console.log(data);\\n return data\\n // end of main operation\\n // define functions used in operation\\n // decode global msg\\n function decoder(str) { // decode rawdata\\n // CARE Decoder\\n AddValue(codeValues, 'Message : ', str);\\n var message = str;\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\n var checksum = message.substring(8, 12);\\n var messageBody = message.substring(16, message.length);\\n debug('message =' + message);\\n debug('checksum =' + checksum);\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\n debug(\\\"message has valid checksum\\\");\\n var messageBody = command; // update value for the ACK\\n debug('command =' + command);\\n if (command == '01') {\\n while (index < total_length + 16) {\\n // gen_location = '0'; //cambiado 30/09\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n //Device ID\\n case '01':\\n var imei = hexToAscii(value);\\n break;\\n //Alarm code\\n case '02':\\n var alarm = 'CYC';\\n var alarmCode = value.substring(0, 8);\\n alarmCode = changeEndianness(alarmCode);\\n var timestampHex = value.substring(8, 16);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n var alarmCodeInt = hexToDecimal(alarmCode);\\n var alarmCodeExt = value.substring(16, 24);\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\n //Extended Alerts\\n // Fall off\\n if ((alarmCodeExtInt & 1) == 1) {\\n var alarm = 'ALF-C';\\n }\\n // Welfare Check-out\\n else if ((alarmCodeExtInt & 2) == 2) {\\n var alarm = 'ALA-C';\\n }\\n // Standard Alerts\\n //Battery low\\n else if ((alarmCodeInt & 1) == 1) {\\n var alarm = 'BATL';\\n }\\n //Overspeed\\n else if ((alarmCodeInt & 2) == 2) {\\n var alarm = 'ALSP';\\n }\\n //Fall\\n else if ((alarmCodeInt & 4) == 4) {\\n var alarm = 'ALF';\\n }\\n //Tilt\\n else if ((alarmCodeInt & 8) == 8) {\\n var alarm = 'Tilt';\\n } else if ((alarmCodeInt & 16) == 16) {\\n if ((alarmCodeInt & 16777216) == 16777216) {\\n var alarm = 'Geo1-IN';\\n } else {\\n var alarm = 'Geo1-OUT';\\n }\\n } else if ((alarmCodeInt & 32) == 32) {\\n if ((alarmCodeInt & 33554432) == 33554432) {\\n var alarm = 'Geo2-IN';\\n } else {\\n var alarm = 'Geo2-OUT';\\n }\\n } else if ((alarmCodeInt & 64) == 64) {\\n if ((alarmCodeInt & 67108864) == 67108864) {\\n var alarm = 'Geo3-IN';\\n } else {\\n var alarm = 'Geo3-OUT';\\n }\\n } else if ((alarmCodeInt & 128) == 128) {\\n if ((alarmCodeInt & 134217728) == 134217728) {\\n var alarm = 'Geo4-IN';\\n } else {\\n var alarm = 'Geo4-OUT';\\n }\\n }\\n //Power Off\\n else if ((alarmCodeInt & 256) == 256) {\\n var alarm = 'PWRF';\\n }\\n //Power On\\n else if ((alarmCodeInt & 512) == 512) {\\n var alarm = 'PWRN';\\n }\\n //Motion\\n else if ((alarmCodeInt & 1024) == 1024) {\\n var alarm = 'ALMOV';\\n }\\n //No Motion\\n else if ((alarmCodeInt & 2048) == 2048) {\\n var alarm = 'ALNM';\\n }\\n //SOS\\n else if ((alarmCodeInt & 4096) == 4096) {\\n var alarm = 'ALSOS';\\n } else if ((alarmCodeInt & 8192) == 8192) {\\n var alarm = 'Side1';\\n } else if ((alarmCodeInt & 16384) == 16384) {\\n var alarm = 'Side2';\\n }\\n //Battery charging\\n else if ((alarmCodeInt & 32768) == 32768) {\\n var alarm = 'BATCN';\\n }\\n //Battery no charging\\n else if ((alarmCodeInt & 65536) == 65536) {\\n var alarm = 'BATCF';\\n }\\n //SOS Ending\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\n else if ((alarmCodeInt & 131072) == 131072) {\\n var alarm = 'SOSEnding';\\n info = 'Alarm Finished';\\n }\\n //Amber Alert EC03 only\\n else if ((alarmCodeInt & 262144) == 262144) {\\n var alarm = 'ALAO';\\n }\\n // welfare Alert check-in ALA-O\\n else if ((alarmCodeInt & 524288) == 524288) {\\n var alarm = 'ALA-O';\\n }\\n // Amber alert Ending ALA-C\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\n var alarm = 'ALA-C';\\n }\\n // Amber alert Ending ALA-C\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\n // var alarm = 'ALA-C';\\n //}\\n // Fall-Down Alert ending\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\n var alarm = 'ALF-C';\\n }\\n // welfare Alert Ending ALA\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\n var alarm = 'ALA';\\n }\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\n // var alarm = 'BEA';\\n //}\\n general += 'alarm:' + alarm + ',';\\n break;\\n //Custom ID\\n case '03':\\n // in value is customID.... '06' for Watch Care\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // exit decoder\\n // const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n // console.log(data);\\n return // data\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n return;\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n //Historical Data Completed\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\n var histData = true;\\n break;\\n //GPS location\\n case '20':\\n location_type = 'GPS';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var speedHex = value.substring(16, 20);\\n var directionHex = value.substring(20, 24);\\n var altitudeHex = value.substring(24, 28);\\n var location_accuracyHex = value.substring(28, 32);\\n var mileageHex = value.substring(32, 40);\\n var satellitesHex = value.substring(40, 42);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\n var direction = hexToDecimal(changeEndianness(directionHex));\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n // Range: 0.5 to 99.9 \\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\n var satellites = hexToDecimal(satellitesHex);\\n // location_time = timestamp;\\n //<>,<>,<>,<>,<>\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //WIFI Towers\\n case '22':\\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n wifi_data = '';\\n for (let i = 0; i < numWifi; i++) {\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n wifi_data = wifi_data.slice(0, -1);\\n general += wifi_data;\\n break;\\n //BLE Location Added 10/10/22\\n case '23':\\n location_type = 'BLE';\\n var mac = value.substring(0, 12);\\n var latitudeHex = value.substring(12, 20);\\n var longitudeHex = value.substring(20, 28);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var address = hexToAscii(value.substring(28, value.length));\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n // location_time = timestamp;\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //General Data , status_data\\n case '24':\\n //var general = 'true'\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n }\\n //else {\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\n //}\\n // reset variables\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n location_time = timestamp;\\n event_time = timestamp;\\n // HardCode to fix possible issue in protocol\\n //event_time = moment.utc().unix();\\n // end of hard code\\n var statusHex = changeEndianness(value.substring(8, 16));\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n //params.BatteryStatus.BatteryStatus = '1';\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n // var alarm = 'BATCN';\\n //configs.BatteryStatus.BatteryStatus = '1';\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\n hasConfigs = true;\\n var batteryStatus = '1';\\n var alarm = 'BATCN';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n //var alarm = 'BATF';\\n // configs.BatteryStatus.BatteryStatus = '3';\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\n hasConfigs = true;\\n var batteryStatus = '3';\\n var alarm = 'BATF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\n statusDevice += 'Not Charging,';\\n var alarm = 'BATCF';\\n //configs.BatteryStatus.BatteryStatus = '2';\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\n var batteryStatus = '2';\\n var alarm = 'BATCF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }\\n }*/\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) { //isHome\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n if ((statusInt & 16384) == 16384) {\\n statusDevice += 'HomeWiFi,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n //statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n general += 'statusDevice:' + statusDevice + ',';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ',';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ',';\\n }\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\n break;\\n //Call Records\\n case '25':\\n //Needed?\\n break;\\n //BLE Location 2\\n case '26':\\n //I don't understand\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Smart Location\\n case '27':\\n location_type = 'SMART';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var location_accuracyHex = value.substring(16, 20);\\n var altitudeHex = value.substring(20, 24);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //location_time = timestamp;\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //Beacon Location Added 11/10/22\\n case '28':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n descr = hexToAscii(value.substring(34, value.length));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n // var latitudeHex = value.substring(18, 26);\\n // var longitudeHex = value.substring(26, 34);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\n break;\\n // Beacon V2\\n case '2C':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(20, 28);\\n longitudeHex = value.substring(28, 36);\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\n break;\\n //Cell Towers Note\\n case '29':\\n location_type = 'LBS';\\n lbs_data = '';\\n var mccHex = changeEndianness(value.substring(0, 4));\\n var mncHex = value.substring(4, 6);\\n var mcc = hexToDecimal(mccHex);\\n lbs_data += mcc + ',';\\n var mnc = hexToDecimal(mncHex);\\n lbs_data += mnc + ',';\\n var indexLbs = 6;\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\n for (let i = 0; i < numTowers; i++) {\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\n var rxl = hexToDecimal(rxlHex);\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\n var lac = hexToDecimal(lacHex);\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\n indexLbs += 14;\\n }\\n lbs_data = lbs_data.slice(0, -1);\\n general += lbs_data;\\n break;\\n case '30':\\n //G-sensor. \\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numStep = (keyLength - 2) / 16;\\n for (let j = 0; j < numStep; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var stepHex = value.substring(8, 16);\\n stepHex = changeEndianness(stepHex);\\n var stepRate = hexToDecimal(stepHex);\\n info = stepRate;\\n //var alarmCode = 'True';\\n var alarm = 'STP';\\n general += ' step counting' + j + ':' + stepRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //Activity\\n case '31':\\n //I don't understand\\n break;\\n //BLE MAC list\\n case '32':\\n //I don't understand\\n break;\\n //Beacon List\\n case '33':\\n //I don't understand\\n break;\\n //Heart Rate Data\\n case '40':\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numHeartRate = (keyLength - 2) / 12;\\n for (let j = 0; j < numHeartRate; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var heartRateHex = value.substring(8, 10);\\n var heartRate = hexToDecimal(heartRateHex);\\n var trustLevelHex = value.substring(10, 12);\\n var trustLevel = hexToDecimal(trustLevelHex);\\n info = heartRate;\\n //var alarmCode = 'True';\\n var alarm = 'HRT';\\n general += ' heart rate' + j + ':' + heartRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //BLE Connected . For Flic button\\n case '62':\\n location_type = 'BLE';\\n //var alarm = 'EBZI'; \\n //var latitudeHex = '00';\\n //var longitudeHex = '00';\\n //var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\n //location_time = timestamp;\\n ble_data = `${flag},${batLevel},${mac}`;\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\n break;\\n }\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n /*else if (alarm === 'HRT') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (alarm === 'STP') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }*/\\n // rest the alarm value\\n alarm = '';\\n }\\n if (command == '02') {\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n switch (key) {\\n //Module Number\\n case '01':\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Firmware version\\n case '02':\\n //no ACK need\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersion = hexToAscii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\n // harcode to avoid conflicts with Rio protocol\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\n // return\\n //}\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n return;\\n }\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //ICCID\\n case '04':\\n var iccid = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //BLE-MAC\\n case '05':\\n var bleMac = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Run Time\\n case '07':\\n var runTime = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '10': // Ringer Volume\\n var volume = hexToDecimal(value);\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"Volume\\\", volume);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\n break;\\n case '0A': //Performance mode\\n //var workMode = hexToDecimal(value);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n //var workMode = hexToDecimal(value);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n var workMode = 1234; // + value + \\\"end\\\";\\n //var workModeVal = 9;\\n //workMode = 'test10';\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n break;\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1F':\\n //System Language\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n //messageBody = messageBody + keyLengthHex + key + value;\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\n break;\\n case '33': // phone option\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\n var auto = 'true';\\n } else var auto = 'false';\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\n allow = 'true';\\n } else var allow = 'false';\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\n break;\\n case '30': //ContactList\\n var contactNumber = value.substring(1, 2);\\n var telLength = hexToDecimal(value.substring(2, 4));\\n var tel = '';\\n switch (contactNumber) {\\n // Emergency Number\\n case '0':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n break;\\n // Speed Dial Number\\n case '1':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\n break;\\n // Gateway Number\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\n tel = 'Esendex UK'\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\n tel = 'Esendex Spain'\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\n tel = 'Esendex UK Acceptance'\\n } else {\\n tel = 'Default'\\n }\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n break;\\n default:\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.length < 6) {\\n contacts += '';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\n contacts += tel + ', ';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n break;\\n case '40': // APN\\n //no ACK need\\n var apn = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n break;\\n case '41': // APN Username\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n break;\\n case '42': // APN Password\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n break;\\n case '43': //Server Details\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\n if (serverDetails.includes('52.232.85.255:5678')) {\\n serverDetails = 'Production'\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\n serverDetails = 'Acceptance'\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\n serverDetails = 'Protocol-Import'\\n } else {\\n serverDetails = 'Default'\\n }\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n break;\\n case '44': //time interval - work mode intervals\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n var workMode = 0;\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\n //workMode = 'High Frequency';\\n workMode = 3;\\n }\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\n //workMode = 'Balanced';\\n workMode = 2;\\n }\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\n //workMode = 'Power Saving';\\n workMode = 1;\\n }\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\n //workMode = 'No Reporting';\\n workMode = 0;\\n }\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '47': // Custom Id\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"customeid\\\", value);\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\n configsToAck.push(configIds.ReadState.CustomId);\\n break;\\n case '53': // Non motion alert\\n //2B020080\\n var status = hexToBin(value.substring(6, 8));\\n var alertSetting = '';\\n var enableDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enableDisable = '1';\\n } else {\\n alertSetting = 'Disable, '\\n };\\n //if (status.substring(5, 6) == '1') {\\n // alertSetting += 'Dial, '\\n //} else {\\n // alertSetting += 'No Dial, '\\n //};\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n case '56': //Fall down sensibility\\n // '00001100'\\n var fallStatus = hexToBin(value.substring(0, 2));\\n var enalbleDisable = '';\\n //if (fallStatus.substring(4, 5) == '1') {\\n if (fallStatus.substring(0, 1) == '1') {\\n var sensibility = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n var sensibility = 'Disable, '\\n };\\n if (fallStatus.substring(5, 6) == '1') {\\n sensibility += 'Dial, '\\n } else {\\n sensibility += 'No Dial, '\\n };\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\n sensibility += sesibityOptionValue;\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\n break;\\n case '73': //BeaconList\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\n var beaconStatus = hexToBin(value.substring(0, 1));\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\n homeBeacon += beaconStatus + ', ';\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case '4A': //Wifi Network List\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\n var wifiStatus = value.substring(0, 1);\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\n /var homeWifi = '';\\n if (wifiIndex == '0') { // Only first Wifi of the list\\n if (wifiStatus == '8') {\\n homeWifi += ' Enable, '\\n enalbleDisable = '1';\\n } else {\\n homeWifi += ' Disable, '\\n //enalbleDisable = '0';\\n };*/\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n }\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\n break;\\n case '21': // Speed Dial Settings\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\n var alertSetting = '';\\n var enalbleDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n alertSetting = 'Disable, '\\n //enableDisable = '0';\\n };\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n //alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n }\\n }\\n }\\n if (command == '03') {\\n while (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n case '01': // Device ID\\n var imei = hexToAscii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n return;\\n }\\n break;\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /* case '03':\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n break; */\\n case '10': // Heartbeat\\n var heartbeat = hexToAscii(value);\\n event_time = moment.utc().unix();\\n if (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\n key = message.substring(index, index = index + 2);\\n if (key == '24') {\\n // debug('key: ' + key) //comment those out\\n value = message.substring(index, index = index + keyLength - 2);\\n // debug(value)\\n var timestampHex = value.substring(0, 8);\\n // debug('timestampt hex: ' + timestampHex)\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n // debug(event_time)\\n var statusHex = changeEndianness(value.substring(8, 16));\\n // debug(statusHex)\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n }\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n // debug('statusHex:' + statusHex)\\n statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n // debug(statusHex)\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n // debug(battery_percentage)\\n // debug(battery_percentage)\\n // debug(statusHex.substring(8, 13))\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n // debug(cellNetworkSignal)\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n // debug(workMode)\\n general += 'statusDevice:' + statusDevice + ';';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ';';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ';';\\n }\\n }\\n }\\n // revisar\\n var gen_location = '0';\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '12': // Device requesting timestamp\\n timestamp = moment.utc().unix();\\n timestampHex = decimalToHex(timestamp);\\n timestampHex = changeEndianness(timestampHex);\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n // respond to device with the timestamp of the server\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '21': //Cell Towers\\n var mccHex = value.substring(0, 2);\\n var mncHex = value.substring(2, 3);\\n var mcc = hexToDecimal(mccHex);\\n var mnc = hexToDecimal(mncHex);\\n var numTowers = (keyLength - 4) / 5;\\n var cellTowers = hexToAscii(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '22': // WIFI locations \\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n gen_location = '';\\n for (let i = 0; i < numWifi; i++) {\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n gen_location = gen_location.slice(0, -1);\\n general += gen_location;\\n //CustomID is not provided so far with command type 03\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n alarmCode = '';\\n break;\\n }\\n }\\n }\\n if (command == '04') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7E') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7F') {\\n // while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\n //}\\n }\\n if (command == 'FE') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n // prepare the ACK msg and change config if it is needed\\n lengthAck = messageBody.length / 2;\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\n ////////////checksum CRC 16\\n var checksumAck = byteStringToByteArray(messageBody);\\n checksumAck = crc16byte(checksumAck);\\n checksumAck = decimalToHex(checksumAck);\\n checksumAck = ('0000' + checksumAck).slice(-4);\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\n // To send ACK to the device previous to internal msg with parts\\n if (needsAck == true) {\\n if (messageBody.length <= 2) {\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\n } else {\\n ack = prefix + messageBody;\\n }\\n AddValue(codeValues, 'imei', imei);\\n AddValue(codeValues, 'ack', ack);\\n }\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\n if (i >= 0) {\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n }\\n // Auxiliary functions\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\n const dataToReceiver = {\\n values: codeValues\\n };\\n if (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck;\\n }\\n if (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate;\\n }\\n if (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend;\\n }\\n return dataToReceiver;\\n }\\n\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n codeValueArray.push(cvpair);\\n }\\n // convert functions\\n function asciiToHex(str) { // ascii to hex \\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\n }\\n\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\n const bytes = [];\\n for (let i = 0; i < str.length; i += 2) {\\n const byte = parseInt(str.substring(i, i + 2), 16);\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\n bytes.push(byte);\\n }\\n }\\n return bytes;\\n }\\n\\n function decimalToHex(x) {\\n return Number(x).toString(16).toUpperCase();\\n }\\n\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\n const bin = parseInt(hex, 16).toString(2);\\n return bin.padStart(hex.length * 4, '0');\\n }\\n\\n function hexToAscii(hex) {\\n if (hex.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\n }\\n\\n function hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 !== 0) {\\n hex = '0' + hex;\\n }\\n const num = parseInt(hex, 16);\\n const bits = hex.length * 4;\\n const maxVal = 2 ** bits;\\n return num >= maxVal / 2 ? num - maxVal : num;\\n }\\n\\n function hexToDecimal(hex) {\\n return parseInt(hex, 16);\\n }\\n // CheckSum and debug functions\\n function changeEndianness(hexString) { // changeEndianness\\n if (hexString.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\n .reverse() // invierte el orden\\n .join('');\\n }\\n\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\n const bytes = byteStringToByteArray(payloadData);\\n const crc = crc16byte(bytes);\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\n return changeEndianness(hex);\\n }\\n\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\n let crc = 0x0000;\\n for (const byte of byteArray) {\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\n }\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[index] ^ (crc << 8);\\n }\\n return crc & 0xFFFF;\\n }\\n\\n function debug(...args) { // write debug info to console log, if localTesting\\n if (localTesting) {\\n console.debug('[DEBUG]', ...args);\\n }\\n }\\n /*\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting) {\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5878, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5878, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n }*/\\n function sendMessageToLocalhostNoWait(message) {\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\n const port = '5678'; //acceptance-dev\\n if (localTesting) {\\n console.debug('[DEBUG] Sending message to test server:', message);\\n }\\n const client = net.createConnection(port, server, () => {\\n client.write(message);\\n client.end();\\n });\\n client.on('error', (err) => {\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\n });\\n client.on('end', () => {\\n if (localTesting) {\\n console.debug('[DEBUG] Connection closed');\\n }\\n });\\n }\\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, net, 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":1744278584},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n ///////////////////////////////////////////////////////////////////////////////\\n //\\n // Roam protocol - please see variables and typical values in order below\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\n //\\n // Author: Juanmi Navarro\\n // Created: 01/01/0000\\n // Last modified: 22/03/2025\\n //\\n ///////////////////////////////////////////////////////////////////////////////\\n if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n }\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n ];\\n var codeValues = [];\\n AddValue(codeValues, 'protocol_template', 'Roam');\\n AddValue(codeValues, 'product', serverParams.ProductName);\\n var dataToReceiver = [];\\n var configsToAck = [];\\n var configsToUpdate = [];\\n var configsToSend = [];\\n if (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n AddValue(codeValues, 'rawMsg', raw);\\n //general SMS message\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n return;\\n }\\n AddValue(codeValues, 'raw', raw);\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\n var homeBeacon = '';\\n var homeWiFi = '';\\n var contacts = '';\\n var gps_data = '';\\n var wifi_data = '';\\n var status_data = '';\\n var lbs_data = '';\\n var beacon_data = '';\\n var ble_data = '';\\n var smart_data = '';\\n //parse header & properties\\n var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n var lengthLittleEndian = message.substring(4, 8);\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\n var messageForReceiver;\\n var sequenceID = message.substring(12, 16);\\n var command = message.substring(16, 18);\\n var index = 18;\\n var prefix = 'AB' + '00';\\n var lengthAck = 0;\\n var ack = '';\\n var needsAck = false;\\n var hasConfigs = false;\\n var general = '';\\n var timestamp = '';\\n var info = '';\\n var customID = '';\\n latitude = 0;\\n longitude = 0;\\n location_accuracy = 0; // GPS location adds the accuracy\\n location_time = event_time = '';\\n speed = 0.0;\\n var location_type = '0';\\n //var gen_location = '0'; \\n var i; // general loop counter\\n var battery_percentage = '';\\n var cellNetworkSignal = '';\\n var workMode = '';\\n //mask bitwise (properties should be '10')\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\n needsAck = true;\\n }\\n // Loop to decode multi-ACK msg\\n if (message.includes('AB00030008C7')) {\\n const multiack = message.split('AB00');\\n for (let i = 1; i < multiack.length; i++) {\\n message = 'AB00' + multiack[i];\\n debug(message);\\n decoder(message);\\n } // FOR multiACK\\n } else decoder(message); // IF multiACK\\n } else if (oystaTemplate == 'True') { // Oysta Template \\n AddValue(codeValues, 'rawMsg', raw);\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\n var gen_location = params.gps_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var location_accuracy = gen_location[2];\\n var speed = gen_location[3];\\n var direction = gen_location[4];\\n var altitude = gen_location[5];\\n var satellites = gen_location[6];\\n var mileage = gen_location[7];\\n if (location_accuracy !== 0) {\\n var fix_state = 1;\\n } else {\\n var fix_state = 0;\\n }\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n AddValue(codeValues, 'speed', speed);\\n AddValue(codeValues, 'direction', direction);\\n AddValue(codeValues, 'altitude', altitude);\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\n AddValue(codeValues, 'mileage', mileage);\\n AddValue(codeValues, 'satellites', satellites);\\n AddValue(codeValues, 'fix_state', fix_state);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\n var variables = []; //Define array\\n variables = params.lbs_data.split(',');\\n var index = 2;\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\n AddValue(codeValues, 'mcc', variables[0]);\\n AddValue(codeValues, 'mnc', variables[1]);\\n AddValue(codeValues, 'lac', variables[index]);\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\n }\\n index += 3;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\n var bssid_array = params.wifi_data.split(',');\\n var index = 0;\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\n }\\n index += 2;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n // when Beacon is detected and it isn't flic BLE detected\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\n var gen_location = params.beacon_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var mac = gen_location[2];\\n var label = gen_location[3];\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac) {\\n AddValue(codeValues, 'beacon_mac', mac);\\n var simpleQuery = [{\\n 'code': 'Mac',\\n 'value': mac,\\n }];\\n var simpleQueryLabel = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery\\n };\\n var labels = [];\\n labels.push(JSON.stringify(simpleQueryLabel));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\n var gen_location = params.ble_data.split(',');\\n var flag = gen_location[0];\\n var batLevel = gen_location[1];\\n var mac2 = gen_location[2];\\n //var label = gen_location[3];\\n AddValue(codeValues, 'flagBLE', flag);\\n AddValue(codeValues, 'batBLE', batLevel);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac2) {\\n AddValue(codeValues, 'beacon_mac', mac2);\\n var simpleQuery2 = [{\\n 'code': 'Mac',\\n 'value': mac2,\\n }];\\n var simpleQueryLabel2 = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery2\\n };\\n var labels2 = [];\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n /* meter mas tarde... \\n if (params.smart_data !== 'undefined') {\\n var gen_location = params.smart_data.split(',')\\n var latitude = gen_location[0]\\n var longitude = gen_location[1]\\n var location_accuracy = gen_location[2]\\n var altitude = gen_location[3]\\n AddValue(codeValues,'latitude', latitude);\\n AddValue(codeValues,'longitude', longitude);\\n AddValue(codeValues,'altitude', altitude);\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\n }\\n */\\n /*else if ((params.event_time) && (params.event_time == '')) {\\n var event_time = moment.utc().unix();\\n AddValue(codeValues,'event_time', event_time);\\n } revisar mas adelante*/\\n // to parse SMS info from the device\\n switch (messageTypeLocalCode) {\\n case 'COMM-SMS': // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\n } else if (params.data.startsWith('flush ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('Set Roam-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('set live tracking')) {\\n configsToAck.push(configIds.Controls.Trace);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.Controls.Reboot);\\n } else if (params.data.startsWith('GPS')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n var i1 = params.data.search('Now:')\\n var i2 = params.data.search('Loc Time:')\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(i2 + 9, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\n //var i1 = params.data.search('IMEI:')\\n //var i2 = params.data.search('GSM signal quality:')\\n var i3 = params.data.search('Software version:')\\n var sub = params.data.substring(i3 + 17, params.data.length)\\n var i4 = sub.search('version:');\\n var fwVersion = sub.substring(i4, sub.length);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\n var i1 = params.data.search('Fall alarm:');\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\n var i2 = params.data.search('level:');\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\n break;\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\n var i1 = raw.search('1,');\\n //var i2 = params.data.search('2,');\\n //var homeBeacon = params.data.substring(i1+2, i2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = raw.search('A1:');\\n if (raw.includes('A2:')) {\\n var i2 = raw.search('A2:');\\n } else {\\n var i2 = raw.search('A10:');\\n }\\n var tel = raw.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n i2 = raw.search('A10:')\\n tel = raw.substring(i2 + 4, raw.length);\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = params.data.search('APN:')\\n var i2 = params.data.search('IP:')\\n var i3 = params.data.search('Move')\\n var apn = params.data.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n var serverDetails = params.data.substring(i2 + 3, i3);\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(0, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n }\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\n var event_time = moment.utc().unix();\\n AddValue(codeValues, 'event_time', event_time);\\n }\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\n // var location_time = moment.utc().unix();\\n // AddValue(codeValues, 'location_time', location_time);\\n //}\\n }\\n // send data msg to kibana\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n console.log(data);\\n return data\\n // end of main operation\\n // define functions used in operation\\n // decode global msg\\n function decoder(str) { // decode rawdata\\n // CARE Decoder\\n AddValue(codeValues, 'Message : ', str);\\n var message = str;\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\n var checksum = message.substring(8, 12);\\n var messageBody = message.substring(16, message.length);\\n debug('message =' + message);\\n debug('checksum =' + checksum);\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\n debug(\\\"message has valid checksum\\\");\\n var messageBody = command; // update value for the ACK\\n debug('command =' + command);\\n if (command == '01') {\\n while (index < total_length + 16) {\\n // gen_location = '0'; //cambiado 30/09\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n //Device ID\\n case '01':\\n var imei = hexToAscii(value);\\n break;\\n //Alarm code\\n case '02':\\n var alarm = 'CYC';\\n var alarmCode = value.substring(0, 8);\\n alarmCode = changeEndianness(alarmCode);\\n var timestampHex = value.substring(8, 16);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n var alarmCodeInt = hexToDecimal(alarmCode);\\n var alarmCodeExt = value.substring(16, 24);\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\n //Extended Alerts\\n // Fall off\\n if ((alarmCodeExtInt & 1) == 1) {\\n var alarm = 'ALF-C';\\n }\\n // Welfare Check-out\\n else if ((alarmCodeExtInt & 2) == 2) {\\n var alarm = 'ALA-C';\\n }\\n // Standard Alerts\\n //Battery low\\n else if ((alarmCodeInt & 1) == 1) {\\n var alarm = 'BATL';\\n }\\n //Overspeed\\n else if ((alarmCodeInt & 2) == 2) {\\n var alarm = 'ALSP';\\n }\\n //Fall\\n else if ((alarmCodeInt & 4) == 4) {\\n var alarm = 'ALF';\\n }\\n //Tilt\\n else if ((alarmCodeInt & 8) == 8) {\\n var alarm = 'Tilt';\\n } else if ((alarmCodeInt & 16) == 16) {\\n if ((alarmCodeInt & 16777216) == 16777216) {\\n var alarm = 'Geo1-IN';\\n } else {\\n var alarm = 'Geo1-OUT';\\n }\\n } else if ((alarmCodeInt & 32) == 32) {\\n if ((alarmCodeInt & 33554432) == 33554432) {\\n var alarm = 'Geo2-IN';\\n } else {\\n var alarm = 'Geo2-OUT';\\n }\\n } else if ((alarmCodeInt & 64) == 64) {\\n if ((alarmCodeInt & 67108864) == 67108864) {\\n var alarm = 'Geo3-IN';\\n } else {\\n var alarm = 'Geo3-OUT';\\n }\\n } else if ((alarmCodeInt & 128) == 128) {\\n if ((alarmCodeInt & 134217728) == 134217728) {\\n var alarm = 'Geo4-IN';\\n } else {\\n var alarm = 'Geo4-OUT';\\n }\\n }\\n //Power Off\\n else if ((alarmCodeInt & 256) == 256) {\\n var alarm = 'PWRF';\\n }\\n //Power On\\n else if ((alarmCodeInt & 512) == 512) {\\n var alarm = 'PWRN';\\n }\\n //Motion\\n else if ((alarmCodeInt & 1024) == 1024) {\\n var alarm = 'ALMOV';\\n }\\n //No Motion\\n else if ((alarmCodeInt & 2048) == 2048) {\\n var alarm = 'ALNM';\\n }\\n //SOS\\n else if ((alarmCodeInt & 4096) == 4096) {\\n var alarm = 'ALSOS';\\n } else if ((alarmCodeInt & 8192) == 8192) {\\n var alarm = 'Side1';\\n } else if ((alarmCodeInt & 16384) == 16384) {\\n var alarm = 'Side2';\\n }\\n //Battery charging\\n else if ((alarmCodeInt & 32768) == 32768) {\\n var alarm = 'BATCN';\\n }\\n //Battery no charging\\n else if ((alarmCodeInt & 65536) == 65536) {\\n var alarm = 'BATCF';\\n }\\n //SOS Ending\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\n else if ((alarmCodeInt & 131072) == 131072) {\\n var alarm = 'SOSEnding';\\n info = 'Alarm Finished';\\n }\\n //Amber Alert EC03 only\\n else if ((alarmCodeInt & 262144) == 262144) {\\n var alarm = 'ALAO';\\n }\\n // welfare Alert check-in ALA-O\\n else if ((alarmCodeInt & 524288) == 524288) {\\n var alarm = 'ALA-O';\\n }\\n // Amber alert Ending ALA-C\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\n var alarm = 'ALA-C';\\n }\\n // Amber alert Ending ALA-C\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\n // var alarm = 'ALA-C';\\n //}\\n // Fall-Down Alert ending\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\n var alarm = 'ALF-C';\\n }\\n // welfare Alert Ending ALA\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\n var alarm = 'ALA';\\n }\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\n // var alarm = 'BEA';\\n //}\\n general += 'alarm:' + alarm + ',';\\n break;\\n //Custom ID\\n case '03':\\n // in value is customID.... '06' for Watch Care\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // exit decoder\\n // const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n // console.log(data);\\n return // data\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n //Historical Data Completed\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\n var histData = true;\\n break;\\n //GPS location\\n case '20':\\n location_type = 'GPS';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var speedHex = value.substring(16, 20);\\n var directionHex = value.substring(20, 24);\\n var altitudeHex = value.substring(24, 28);\\n var location_accuracyHex = value.substring(28, 32);\\n var mileageHex = value.substring(32, 40);\\n var satellitesHex = value.substring(40, 42);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\n var direction = hexToDecimal(changeEndianness(directionHex));\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n // Range: 0.5 to 99.9 \\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\n var satellites = hexToDecimal(satellitesHex);\\n // location_time = timestamp;\\n //<>,<>,<>,<>,<>\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //WIFI Towers\\n case '22':\\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n wifi_data = '';\\n for (let i = 0; i < numWifi; i++) {\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n wifi_data = wifi_data.slice(0, -1);\\n general += wifi_data;\\n break;\\n //BLE Location Added 10/10/22\\n case '23':\\n location_type = 'BLE';\\n var mac = value.substring(0, 12);\\n var latitudeHex = value.substring(12, 20);\\n var longitudeHex = value.substring(20, 28);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var address = hexToAscii(value.substring(28, value.length));\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n // location_time = timestamp;\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //General Data , status_data\\n case '24':\\n //var general = 'true'\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n }\\n //else {\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\n //}\\n // reset variables\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n location_time = timestamp;\\n event_time = timestamp;\\n // HardCode to fix possible issue in protocol\\n //event_time = moment.utc().unix();\\n // end of hard code\\n var statusHex = changeEndianness(value.substring(8, 16));\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n //params.BatteryStatus.BatteryStatus = '1';\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n // var alarm = 'BATCN';\\n //configs.BatteryStatus.BatteryStatus = '1';\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\n hasConfigs = true;\\n var batteryStatus = '1';\\n var alarm = 'BATCN';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n //var alarm = 'BATF';\\n // configs.BatteryStatus.BatteryStatus = '3';\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\n hasConfigs = true;\\n var batteryStatus = '3';\\n var alarm = 'BATF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\n statusDevice += 'Not Charging,';\\n var alarm = 'BATCF';\\n //configs.BatteryStatus.BatteryStatus = '2';\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\n var batteryStatus = '2';\\n var alarm = 'BATCF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }\\n }*/\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) { //isHome\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n if ((statusInt & 16384) == 16384) {\\n statusDevice += 'HomeWiFi,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n //statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n general += 'statusDevice:' + statusDevice + ',';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ',';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ',';\\n }\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\n break;\\n //Call Records\\n case '25':\\n //Needed?\\n break;\\n //BLE Location 2\\n case '26':\\n //I don't understand\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Smart Location\\n case '27':\\n location_type = 'SMART';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var location_accuracyHex = value.substring(16, 20);\\n var altitudeHex = value.substring(20, 24);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //location_time = timestamp;\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //Beacon Location Added 11/10/22\\n case '28':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n descr = hexToAscii(value.substring(34, value.length));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n // var latitudeHex = value.substring(18, 26);\\n // var longitudeHex = value.substring(26, 34);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\n break;\\n // Beacon V2\\n case '2C':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(20, 28);\\n longitudeHex = value.substring(28, 36);\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\n break;\\n //Cell Towers Note\\n case '29':\\n location_type = 'LBS';\\n lbs_data = '';\\n var mccHex = changeEndianness(value.substring(0, 4));\\n var mncHex = value.substring(4, 6);\\n var mcc = hexToDecimal(mccHex);\\n lbs_data += mcc + ',';\\n var mnc = hexToDecimal(mncHex);\\n lbs_data += mnc + ',';\\n var indexLbs = 6;\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\n for (let i = 0; i < numTowers; i++) {\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\n var rxl = hexToDecimal(rxlHex);\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\n var lac = hexToDecimal(lacHex);\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\n indexLbs += 14;\\n }\\n lbs_data = lbs_data.slice(0, -1);\\n general += lbs_data;\\n break;\\n case '30':\\n //G-sensor. \\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numStep = (keyLength - 2) / 16;\\n for (let j = 0; j < numStep; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var stepHex = value.substring(8, 16);\\n stepHex = changeEndianness(stepHex);\\n var stepRate = hexToDecimal(stepHex);\\n info = stepRate;\\n //var alarmCode = 'True';\\n var alarm = 'STP';\\n general += ' step counting' + j + ':' + stepRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //Activity\\n case '31':\\n //I don't understand\\n break;\\n //BLE MAC list\\n case '32':\\n //I don't understand\\n break;\\n //Beacon List\\n case '33':\\n //I don't understand\\n break;\\n //Heart Rate Data\\n case '40':\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numHeartRate = (keyLength - 2) / 12;\\n for (let j = 0; j < numHeartRate; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var heartRateHex = value.substring(8, 10);\\n var heartRate = hexToDecimal(heartRateHex);\\n var trustLevelHex = value.substring(10, 12);\\n var trustLevel = hexToDecimal(trustLevelHex);\\n info = heartRate;\\n //var alarmCode = 'True';\\n var alarm = 'HRT';\\n general += ' heart rate' + j + ':' + heartRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //BLE Connected . For Flic button\\n case '62':\\n location_type = 'BLE';\\n //var alarm = 'EBZI'; \\n //var latitudeHex = '00';\\n //var longitudeHex = '00';\\n //var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\n //location_time = timestamp;\\n ble_data = `${flag},${batLevel},${mac}`;\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\n break;\\n }\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n /*else if (alarm === 'HRT') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (alarm === 'STP') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }*/\\n // rest the alarm value\\n alarm = '';\\n }\\n if (command == '02') {\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n switch (key) {\\n //Module Number\\n case '01':\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Firmware version\\n case '02':\\n //no ACK need\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersion = hexToAscii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\n // harcode to avoid conflicts with Rio protocol\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\n // return\\n //}\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //ICCID\\n case '04':\\n var iccid = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //BLE-MAC\\n case '05':\\n var bleMac = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Run Time\\n case '07':\\n var runTime = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '10': // Ringer Volume\\n var volume = hexToDecimal(value);\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"Volume\\\", volume);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\n break;\\n case '0A': //Performance mode\\n //var workMode = hexToDecimal(value);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n //var workMode = hexToDecimal(value);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n var workMode = 1234; // + value + \\\"end\\\";\\n //var workModeVal = 9;\\n //workMode = 'test10';\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n break;\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1F':\\n //System Language\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n //messageBody = messageBody + keyLengthHex + key + value;\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\n break;\\n case '33': // phone option\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\n var auto = 'true';\\n } else var auto = 'false';\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\n allow = 'true';\\n } else var allow = 'false';\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\n break;\\n case '30': //ContactList\\n var contactNumber = value.substring(1, 2);\\n var telLength = hexToDecimal(value.substring(2, 4));\\n var tel = '';\\n switch (contactNumber) {\\n // Emergency Number\\n case '0':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n break;\\n // Speed Dial Number\\n case '1':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\n break;\\n // Gateway Number\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\n tel = 'Esendex UK'\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\n tel = 'Esendex Spain'\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\n tel = 'Esendex UK Acceptance'\\n } else {\\n tel = 'Default'\\n }\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n break;\\n default:\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.length < 6) {\\n contacts += '';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\n contacts += tel + ', ';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n break;\\n case '40': // APN\\n //no ACK need\\n var apn = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n break;\\n case '41': // APN Username\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n break;\\n case '42': // APN Password\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n break;\\n case '43': //Server Details\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\n if (serverDetails.includes('52.232.85.255:5678')) {\\n serverDetails = 'Production'\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\n serverDetails = 'Acceptance'\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\n serverDetails = 'Protocol-Import'\\n } else {\\n serverDetails = 'Default'\\n }\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n break;\\n case '44': //time interval - work mode intervals\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n var workMode = 0;\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\n //workMode = 'High Frequency';\\n workMode = 3;\\n }\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\n //workMode = 'Balanced';\\n workMode = 2;\\n }\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\n //workMode = 'Power Saving';\\n workMode = 1;\\n }\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\n //workMode = 'No Reporting';\\n workMode = 0;\\n }\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '47': // Custom Id\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"customeid\\\", value);\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\n configsToAck.push(configIds.ReadState.CustomId);\\n break;\\n case '53': // Non motion alert\\n //2B020080\\n var status = hexToBin(value.substring(6, 8));\\n var alertSetting = '';\\n var enableDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enableDisable = '1';\\n } else {\\n alertSetting = 'Disable, '\\n };\\n //if (status.substring(5, 6) == '1') {\\n // alertSetting += 'Dial, '\\n //} else {\\n // alertSetting += 'No Dial, '\\n //};\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n case '56': //Fall down sensibility\\n // '00001100'\\n var fallStatus = hexToBin(value.substring(0, 2));\\n var enalbleDisable = '';\\n //if (fallStatus.substring(4, 5) == '1') {\\n if (fallStatus.substring(0, 1) == '1') {\\n var sensibility = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n var sensibility = 'Disable, '\\n };\\n if (fallStatus.substring(5, 6) == '1') {\\n sensibility += 'Dial, '\\n } else {\\n sensibility += 'No Dial, '\\n };\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\n sensibility += sesibityOptionValue;\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\n break;\\n case '73': //BeaconList\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\n var beaconStatus = hexToBin(value.substring(0, 1));\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\n homeBeacon += beaconStatus + ', ';\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case '4A': //Wifi Network List\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\n var wifiStatus = value.substring(0, 1);\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\n /var homeWifi = '';\\n if (wifiIndex == '0') { // Only first Wifi of the list\\n if (wifiStatus == '8') {\\n homeWifi += ' Enable, '\\n enalbleDisable = '1';\\n } else {\\n homeWifi += ' Disable, '\\n //enalbleDisable = '0';\\n };*/\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n }\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\n break;\\n case '21': // Speed Dial Settings\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\n var alertSetting = '';\\n var enalbleDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n alertSetting = 'Disable, '\\n //enableDisable = '0';\\n };\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n //alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n }\\n }\\n }\\n if (command == '03') {\\n while (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n case '01': // Device ID\\n var imei = hexToAscii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n return;\\n }\\n break;\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /* case '03':\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n break; */\\n case '10': // Heartbeat\\n var heartbeat = hexToAscii(value);\\n event_time = moment.utc().unix();\\n if (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\n key = message.substring(index, index = index + 2);\\n if (key == '24') {\\n // debug('key: ' + key) //comment those out\\n value = message.substring(index, index = index + keyLength - 2);\\n // debug(value)\\n var timestampHex = value.substring(0, 8);\\n // debug('timestampt hex: ' + timestampHex)\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n // debug(event_time)\\n var statusHex = changeEndianness(value.substring(8, 16));\\n // debug(statusHex)\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n }\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n // debug('statusHex:' + statusHex)\\n statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n // debug(statusHex)\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n // debug(battery_percentage)\\n // debug(battery_percentage)\\n // debug(statusHex.substring(8, 13))\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n // debug(cellNetworkSignal)\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n // debug(workMode)\\n general += 'statusDevice:' + statusDevice + ';';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ';';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ';';\\n }\\n }\\n }\\n // revisar\\n var gen_location = '0';\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '12': // Device requesting timestamp\\n timestamp = moment.utc().unix();\\n timestampHex = decimalToHex(timestamp);\\n timestampHex = changeEndianness(timestampHex);\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n // respond to device with the timestamp of the server\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '21': //Cell Towers\\n var mccHex = value.substring(0, 2);\\n var mncHex = value.substring(2, 3);\\n var mcc = hexToDecimal(mccHex);\\n var mnc = hexToDecimal(mncHex);\\n var numTowers = (keyLength - 4) / 5;\\n var cellTowers = hexToAscii(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '22': // WIFI locations \\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n gen_location = '';\\n for (let i = 0; i < numWifi; i++) {\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n gen_location = gen_location.slice(0, -1);\\n general += gen_location;\\n //CustomID is not provided so far with command type 03\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n alarmCode = '';\\n break;\\n }\\n }\\n }\\n if (command == '04') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7E') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7F') {\\n // while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\n //}\\n }\\n if (command == 'FE') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n // prepare the ACK msg and change config if it is needed\\n lengthAck = messageBody.length / 2;\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\n ////////////checksum CRC 16\\n var checksumAck = byteStringToByteArray(messageBody);\\n checksumAck = crc16byte(checksumAck);\\n checksumAck = decimalToHex(checksumAck);\\n checksumAck = ('0000' + checksumAck).slice(-4);\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\n // To send ACK to the device previous to internal msg with parts\\n if (needsAck == true) {\\n if (messageBody.length <= 2) {\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\n } else {\\n ack = prefix + messageBody;\\n }\\n AddValue(codeValues, 'imei', imei);\\n AddValue(codeValues, 'ack', ack);\\n }\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\n if (i >= 0) {\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n }\\n // Auxiliary functions\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\n const dataToReceiver = {\\n values: codeValues\\n };\\n if (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck;\\n }\\n if (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate;\\n }\\n if (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend;\\n }\\n return dataToReceiver;\\n }\\n\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n codeValueArray.push(cvpair);\\n }\\n // convert functions\\n function asciiToHex(str) { // ascii to hex \\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\n }\\n\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\n const bytes = [];\\n for (let i = 0; i < str.length; i += 2) {\\n const byte = parseInt(str.substring(i, i + 2), 16);\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\n bytes.push(byte);\\n }\\n }\\n return bytes;\\n }\\n\\n function decimalToHex(x) {\\n return Number(x).toString(16).toUpperCase();\\n }\\n\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\n const bin = parseInt(hex, 16).toString(2);\\n return bin.padStart(hex.length * 4, '0');\\n }\\n\\n function hexToAscii(hex) {\\n if (hex.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\n }\\n\\n function hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 !== 0) {\\n hex = '0' + hex;\\n }\\n const num = parseInt(hex, 16);\\n const bits = hex.length * 4;\\n const maxVal = 2 ** bits;\\n return num >= maxVal / 2 ? num - maxVal : num;\\n }\\n\\n function hexToDecimal(hex) {\\n return parseInt(hex, 16);\\n }\\n // CheckSum and debug functions\\n function changeEndianness(hexString) { // changeEndianness\\n if (hexString.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\n .reverse() // invierte el orden\\n .join('');\\n }\\n\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\n const bytes = byteStringToByteArray(payloadData);\\n const crc = crc16byte(bytes);\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\n return changeEndianness(hex);\\n }\\n\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\n let crc = 0x0000;\\n for (const byte of byteArray) {\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\n }\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[index] ^ (crc << 8);\\n }\\n return crc & 0xFFFF;\\n }\\n\\n function debug(...args) { // write debug info to console log, if localTesting\\n if (localTesting) {\\n console.debug('[DEBUG]', ...args);\\n }\\n }\\n /*\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting) {\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5878, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5878, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n }*/\\n function sendMessageToLocalhostNoWait(message) {\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\n const port = '5678'; //acceptance-dev\\n if (localTesting) {\\n console.debug('[DEBUG] Sending message to test server:', message);\\n }\\n const client = net.createConnection(port, server, () => {\\n client.write(message);\\n client.end();\\n });\\n client.on('error', (err) => {\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\n });\\n client.on('end', () => {\\n if (localTesting) {\\n console.debug('[DEBUG] Connection closed');\\n }\\n });\\n }\\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, net, 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":1744367131}]}],"Groups":[{"Id":6206,"Parent":null,"Name":"Setup","Json":"{\"description\":null,\"columns\":3,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6207,"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"Controls","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6208,"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"Configure Device","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6209,"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"On Device","Json":"{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6210,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Additional Settings","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6210,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Additional Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736425387},{"Type":1,"NewValue":"{\"Id\":6210,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Additional Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427637},{"Type":1,"NewValue":"{\"Id\":6210,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Additional Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427688}]},{"Id":6212,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Communication Settings","Json":"{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6213,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Additional Settings","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6213,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Additional Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427737}]},{"Id":6214,"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"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\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6214,\"Parent\":{\"Id\":6253,\"Name\":\"Alert Settings\",\"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\":6214,\"Name\":\"No Activity\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6254,\"Name\":\"Fall Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6256,\"Name\":\"Non Movement Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"No Activity\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340470}]},{"Id":6216,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read State","Json":"{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6217,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Communication Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6219,"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":"Approved Contacts","Json":"{\"description\":\"Approved Contacts\",\"columns\":1,\"order\":2,\"listSize\":7,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6219,\"Parent\":{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6219,\"Name\":\"Approved Contacts\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":7,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6652,\"Name\":\"Speed Dial\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6577,\"Name\":\"Beacon List\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":10,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Approved Contacts\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":7,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340390}]},{"Id":6253,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Alert Settings","Json":"{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6253,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Alert Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427728}]},{"Id":6254,"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Fall Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6256,"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Non Movement Settings","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6259,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"System Settings","Json":"{\"description\":\"System Settings\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6259,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":6,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340526},{"Type":1,"NewValue":"{\"Id\":6259,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427742}]},{"Id":6268,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Performance Settings","Json":"{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6268,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Performance Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427733}]},{"Id":6296,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Performance Settings","Json":"{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736425391},{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736425516},{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427677},{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427926},{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427938}]},{"Id":6297,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Alert Settings","Json":"{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6297,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Alert Settings\",\"Json\":\"{\\\"description\\\":\\\"Read Alert Settings\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736425512},{"Type":1,"NewValue":"{\"Id\":6297,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Alert Settings\",\"Json\":\"{\\\"description\\\":\\\"Read Alert Settings\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427634},{"Type":1,"NewValue":"{\"Id\":6297,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Alert Settings\",\"Json\":\"{\\\"description\\\":\\\"Read Alert Settings\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427684},{"Type":1,"NewValue":"{\"Id\":6297,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Alert Settings\",\"Json\":\"{\\\"description\\\":\\\"Read Alert Settings\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427923}]},{"Id":6303,"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Fall Settings","Json":"{\"description\":\"Read Fall Settings\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6303,\"Parent\":{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6303,\"Name\":\"Read Fall Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6305,\"Name\":\"Read Non Movement Settings\",\"Json\":{\"description\":\"Read Non Movement Settings\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Fall Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340245}]},{"Id":6305,"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Non Movement Settings","Json":"{\"description\":\"Read Non Movement Settings\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6305,\"Parent\":{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6305,\"Name\":\"Read Non Movement Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6303,\"Name\":\"Read Fall Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Non Movement Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340275}]},{"Id":6334,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read System Settings","Json":"{\"description\":\"Read System Settings\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6334,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read System Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340297}]},{"Id":6577,"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":"Beacon List","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":10,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6652,"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":"Speed Dial","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6653,"Parent":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6653,"Name":"Read Speed Dial Settings","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":"Read Speed Dial Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6746,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"d2","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 3, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6747,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"d1","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 3, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6748,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"t1","Json":"{ \"description\": null, \"columns\": 1, \"order\": 2, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6750,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"t3","Json":"{ \"description\": null, \"columns\": 1, \"order\": 2, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 3}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6751,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"t2","Json":"{ \"description\": null, \"columns\": 1, \"order\": 2, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6774,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"DG","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 1, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6775,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"DG","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 1, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6803,"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"WiFi List","Json":"{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6803,\"Parent\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"WiFi List\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":5,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340361},{"Type":1,"NewValue":"{\"Id\":6803,\"Parent\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6859,\"Name\":\"Oysta Office\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":1},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6972,\"Name\":\"Eulalia Home\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":2},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6966,\"Name\":\"MOVISTAR_OYSTA\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":1},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6940,\"Name\":\"Wifi1\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":1},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6860,\"Name\":\"Home\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":2},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]}]},\"Name\":\"WiFi List\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":5,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736530831}]},{"Id":6805,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"A2","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 2, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6806,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"A3","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 2, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 3}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6809,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"B3","Json":"{ \"description\": null, \"columns\": 1, \"order\": 3, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 3}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6814,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"B2","Json":"{ \"description\": null, \"columns\": 1, \"order\": 3, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6815,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"B4","Json":"{ \"description\": null, \"columns\": 1, \"order\": 3, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6820,"Parent":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read WiFi List","Json":"{\"description\":\"Read WiFi List\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6820,\"Parent\":{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6820,\"Name\":\"Read WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read WiFi List\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340151}]},{"Id":6847,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"w113","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6848,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"w12","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6859,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Oysta Office","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6860,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Home","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6861,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"home","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 2, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6862,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"home","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 2, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6863,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Oysta Office","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6864,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Home","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6865,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"home","Json":"{ \"description\": null, \"columns\": 1, \"order\": 3, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":11192,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Get Current Config","Json":"{\"name\":\"Get Current Config\",\"default\":\"\",\"description\":\"Get Current Config\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Retrieve the current config from the device. Please do this before and after the configuration of the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11197,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Power Off","Json":"{\"name\":\"Power Off\",\"default\":\"\",\"description\":\"Power Off\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Turn the device off remotely\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11326,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Get Language / Performance","Json":"{\"name\":\"Get Language / Performance\",\"default\":\"\",\"description\":\"Get Language / Performance\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Get Language / Performance\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":13}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11271,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Get Alert Settings","Json":"{\"name\":\"Get Alert Settings\",\"default\":\"\",\"description\":\"Get Alert Settings\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Get Alert Settings\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":11}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11198,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Get Firmware Version","Json":"{\"name\":\"Get Firmware Version\",\"default\":\"\",\"description\":\"Get Firmware Version\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Retrieve the current firmware version from the device.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":12}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11199,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Configuration Mode","Json":"{\"name\":\"Configuration Mode\",\"default\":\"false\",\"description\":\"Configuration Mode\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Makes the device connect to the server quicker to enable a faster setup time.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11220,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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 Controls","Json":"{\"name\":\"Enable Disable Controls\",\"default\":\"\",\"description\":null,\"type\":\"enable\",\"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\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11191,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Firmware Upgrade","Json":"{\"name\":\"Firmware Upgrade\",\"default\":\"\",\"description\":\"Firmware Upgrade\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Upgrade the device to the latest firmware (if available)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11193,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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\":\"Real Time Locate\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends a command to find the GPS location of the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11189,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Factory Reset","Json":"{\"name\":\"Factory Reset\",\"default\":\"\",\"description\":\"Factory Reset\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Reset the device the Oysta factory defaults\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":10}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11194,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Find Device","Json":"{\"name\":\"Find Device\",\"default\":\"\",\"description\":\"Find Device\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Click this to send a command to the device that will help the VIP find their device if lost in the home. The device will emit a sound.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11195,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Clear Buffered Messages","Json":"{\"name\":\"Clear Buffered Messages\",\"default\":\"\",\"description\":\"Clear Buffered Messages\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clear all pending messages to the server\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11196,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Reboot","Json":"{\"name\":\"Reboot\",\"default\":\"\",\"description\":\"Reboot\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Power cycle the device remotely.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11222,"Group":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Enable Disable Configure Device","Json":"{\"name\":\"Enable Disable Configure Device\",\"default\":\"\",\"description\":null,\"type\":\"enable\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11201,"Group":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Last Configured","Json":"{\"name\":\"Last Configured\",\"default\":\"\",\"description\":\"Last Configured\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11221,"Group":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Enable Disable On Device","Json":"{\"name\":\"Enable Disable On Device\",\"default\":\"\",\"description\":null,\"type\":\"enable\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11200,"Group":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"LastDateTimeRead","Json":"{\"name\":\"LastDateTimeRead\",\"default\":\"\",\"description\":\"Last Update\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11203,"Group":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6653,"Name":"Read Speed Dial Settings","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":"Approved Contacts","Json":"{\"name\":\"Approved Contacts\",\"default\":\"\",\"description\":\"Current Approved Contacts\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11204,"Group":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6653,"Name":"Read Speed Dial Settings","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":"Home Beacon","Json":"{\"name\":\"Home Beacon\",\"default\":\"\",\"description\":\"Current Home Beacon\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11208,"Group":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"APN","Json":"{\"name\":\"APN\",\"default\":\"\",\"description\":\"Current APN\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The Access Point Name stored on the device will be reported and shown here.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11206,"Group":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SMS Gateway","Json":"{\"name\":\"SMS Gateway\",\"default\":\"\",\"description\":\"SMS Gateway\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The SMS gateway that the device is using to send and receive SMSs (Esendex UK/Esendex Spain)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11207,"Group":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Server","Json":"{\"name\":\"Server\",\"default\":\"\",\"description\":\"Current Server\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The server the device is currently reporting to will be shown here: Acceptance/Production\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11209,"Group":{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"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":"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\":false,\"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":[{"Type":1,"NewValue":"{\"Id\":11209,\"Group\":{\"Id\":6214,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"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\\\":false,\\\"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\":[]}","Timestamp":1734525297}],"LanguageId":null,"Tags":[{"Id":2149,"Name":"noActivityInterval","BackendAction":"NoActivityInterval","Value":""}]},{"Id":11210,"Group":{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"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 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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11210,\"Group\":{\"Id\":6214,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"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\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable or disable no activity alerts\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736339464}],"LanguageId":null,"Tags":[{"Id":2152,"Name":"activateNoActivity","BackendAction":"ActivateNoActivity","Value":""}]},{"Id":11202,"Group":{"Id":6216,"Name":"Read State","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Current Firmware Version","Json":"{\"name\":\"Current Firmware Version\",\"default\":\"\",\"description\":\"Current Firmware Version\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11279,"Group":{"Id":6216,"Name":"Read State","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Custom Id","Json":"{\"name\":\"Custom Id\",\"default\":\"\",\"description\":\"Custom Id\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Custom Id\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11214,"Group":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"SMS Gateway","Json":"{\"name\":\"SMS Gateway\",\"default\":\"\",\"description\":\"Set SMS Gateway\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"value\":\"00447781482635,Esendex UK\",\"label\":\"Esendex UK\"},{\"value\":\"0034627177148,Esendex Spain\",\"label\":\"Esendex Spain\"},{\"value\":\"00447507288240,Esendex UK Acceptance\",\"label\":\"Esendex UK Acceptance\"},{\"label\":\"default\",\"value\":\"default\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11214,\"Group\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":\"SMS Gateway\",\"Json\":\"{\\\"name\\\":\\\"SMS Gateway\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Set SMS Gateway\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select the SMS gateway that the device will use to send and receive SMSs (Esendex UK/Esendex Spain)\\\",\\\"options\\\":[{\\\"value\\\":\\\"00447781482635,Esendex UK\\\",\\\"label\\\":\\\"Esendex UK\\\"},{\\\"value\\\":\\\"0034627177148,Esendex Spain\\\",\\\"label\\\":\\\"Esendex Spain\\\"},{\\\"value\\\":\\\"00447507288240,Esendex UK Acceptance\\\",\\\"label\\\":\\\"Esendex UK Acceptance\\\"},{\\\"value\\\":\\\"default\\\",\\\"label\\\":\\\"default\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449062}],"LanguageId":null,"Tags":[]},{"Id":11216,"Group":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"APN","Json":"{ \"name\": \"APN\", \"default\": \"\", \"description\": \"Set APN\", \"type\": \"apn\", \"suffix\": null, \"prefix\": null, \"min\": null, \"max\": null, \"futureOnly\": false, \"integerOnly\": false, \"isReadOnly\": false, \"isHidden\": false, \"minLength\": null, \"maxLength\": null, \"helpText\": null, \"options\": [ { \"value\": \" iot.cslm2m.com,,\", \"label\": \" CSL (NEW) [test]\" }, { \"value\": \"hs.vodafone.ie,,\", \"label\": \"Vodafone HS [Ireland]\" }, { \"value\": \"movistar.es,MOVISTAR,MOVISTAR\", \"label\": \"Movistar\" }, { \"value\": \"m2m.movistar.es,movistar,movistar\", \"label\": \"Movistar M2M Spain [Spain]\" }, { \"value\": \"inetd.vfes,,\", \"label\": \"Spainiot \" }, { \"value\": \"airtelwap.es,wap@wap,wap\", \"label\": \"Vodafone 4G [Spain]\" }, { \"value\": \"wlapn.com,deimos,deimos\", \"label\": \"DEIMOS [Spain]\" }, { \"value\": \" iot.cslm2m.com,,\", \"label\": \" CSL (NEW) [test]\" }, { \"value\": \"ukiot1,,\", \"label\": \"BT-EE-trial [UK]\" }, { \"value\": \"test,,\", \"label\": \"test []\" }, { \"value\": \"stream.co.uk,streamip,streamip\", \"label\": \"stream \" }, { \"value\": \"m2m.vodafone.es,Vodafone,Vodafone\", \"label\": \"m2m.vodafone.es [Spain]\" }, { \"value\": \"m2m.vodafone.es,vodafone,vodafone\", \"label\": \"m2m Vodafone Spain [Spain]\" }, { \"value\": \"autoselect,,\", \"label\": \"autoselect \" }, { \"value\": \"internet,0,0\", \"label\": \"China Mobile GPRS\" } ], \"toTranslate\": [ \"name\", \"description\", \"helpText\", \"label\" ]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11216,\"Group\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":\"APN\",\"Json\":\"{\\\"name\\\":\\\"APN\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Set APN\\\",\\\"type\\\":\\\"apn\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select the Access Point Name of your provider\\\",\\\"options\\\":[{\\\"value\\\":\\\" iot.cslm2m.com,,\\\",\\\"label\\\":\\\" CSL (NEW) [test]\\\"},{\\\"value\\\":\\\"hs.vodafone.ie,,\\\",\\\"label\\\":\\\"Vodafone HS [Ireland]\\\"},{\\\"value\\\":\\\"movistar.es,MOVISTAR,MOVISTAR\\\",\\\"label\\\":\\\"Movistar\\\"},{\\\"value\\\":\\\"m2m.movistar.es,movistar,movistar\\\",\\\"label\\\":\\\"Movistar M2M Spain [Spain]\\\"},{\\\"value\\\":\\\"inetd.vfes,,\\\",\\\"label\\\":\\\"Spainiot \\\"},{\\\"value\\\":\\\"airtelwap.es,wap@wap,wap\\\",\\\"label\\\":\\\"Vodafone 4G [Spain]\\\"},{\\\"value\\\":\\\"wlapn.com,deimos,deimos\\\",\\\"label\\\":\\\"DEIMOS [Spain]\\\"},{\\\"value\\\":\\\" iot.cslm2m.com,,\\\",\\\"label\\\":\\\" CSL (NEW) [test]\\\"},{\\\"value\\\":\\\"ukiot1,,\\\",\\\"label\\\":\\\"BT-EE-trial [UK]\\\"},{\\\"value\\\":\\\"test,,\\\",\\\"label\\\":\\\"test []\\\"},{\\\"value\\\":\\\"stream.co.uk,streamip,streamip\\\",\\\"label\\\":\\\"stream \\\"},{\\\"value\\\":\\\"m2m.vodafone.es,Vodafone,Vodafone\\\",\\\"label\\\":\\\"m2m.vodafone.es [Spain]\\\"},{\\\"value\\\":\\\"m2m.vodafone.es,vodafone,vodafone\\\",\\\"label\\\":\\\"m2m Vodafone Spain [Spain]\\\"},{\\\"value\\\":\\\"autoselect,,\\\",\\\"label\\\":\\\"autoselect \\\"},{\\\"value\\\":\\\"internet,0,0\\\",\\\"label\\\":\\\"China Mobile GPRS\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448942}],"LanguageId":null,"Tags":[]},{"Id":11213,"Group":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"Server","Json":"{\"name\":\"Server\",\"default\":\"\",\"description\":\"Set Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"value\":\"default\",\"label\":\"default\"},{\"value\":\"52.232.85.255,5678\",\"label\":\"Production\"},{\"value\":\"52.174.17.77,5678\",\"label\":\"Acceptance\"},{\"label\":\"Protocol-Import\",\"value\":\"52.174.17.77,5778\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11213,\"Group\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":\"Server\",\"Json\":\"{\\\"name\\\":\\\"Server\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Set Server\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select the server the device will report: Acceptance/Production\\\",\\\"options\\\":[{\\\"value\\\":\\\"default\\\",\\\"label\\\":\\\"default\\\"},{\\\"value\\\":\\\"52.232.85.255,5678\\\",\\\"label\\\":\\\"Production\\\"},{\\\"value\\\":\\\"52.174.17.77,5678\\\",\\\"label\\\":\\\"Acceptance\\\"},{\\\"value\\\":\\\"52.174.17.77,5778\\\",\\\"label\\\":\\\"Protocol-Import\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449011},{"Type":1,"NewValue":"{\"Id\":11213,\"Group\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":\"Server\",\"Json\":\"{\\\"name\\\":\\\"Server\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Set Server\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select the server the device will report: Acceptance/Production\\\",\\\"options\\\":[{\\\"value\\\":\\\"52.232.85.255,5678\\\",\\\"label\\\":\\\"Production\\\"},{\\\"value\\\":\\\"52.174.17.77,5678\\\",\\\"label\\\":\\\"Acceptance\\\"},{\\\"value\\\":\\\"52.174.17.77,5778\\\",\\\"label\\\":\\\"Protocol-Import\\\"},{\\\"label\\\":\\\"Protocol-dev\\\",\\\"value\\\":\\\"52.174.17.77,5878\\\"},{\\\"label\\\":\\\"Default\\\",\\\"value\\\":\\\"Default\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1742495687}],"LanguageId":null,"Tags":[]},{"Id":11261,"Group":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Contact","Json":"{\"name\":\"Contact\",\"default\":\"\",\"description\":\"Contact\",\"type\":\"phone\",\"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\":11261,\"Group\":{\"Id\":6219,\"Name\":\"Approved Contacts\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":7,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Contact\",\"Json\":\"{\\\"name\\\":\\\"Contact\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Contact\\\",\\\"type\\\":\\\"phone\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Phone number of the contact\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449634}],"LanguageId":null,"Tags":[]},{"Id":11296,"Group":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Emergency Number","Json":"{\"name\":\"Emergency Number\",\"default\":\"\",\"description\":\"Emergency Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The number called when the default SOS button is pushed on the device (typically the ARC)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11241,"Group":{"Id":6254,"Name":"Fall Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"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 Fall Settings","Json":"{\"name\":\"Enable Disable Fall Settings\",\"default\":\"false\",\"description\":\"Toggle Fall alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle feature that raises an alarm when the VIP falls and breaches the specified sensitivity setting\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11242,"Group":{"Id":6254,"Name":"Fall Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"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":"Sensitivity","Json":"{\"name\":\"Sensitivity\",\"default\":\"\",\"description\":\"Sensitivity\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":9,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"1-9 (9 high sensitivity/low trigger)\",\"options\":[{\"value\":\"3\",\"label\":\"Low\"},{\"value\":\"6\",\"label\":\"Medium\"},{\"value\":\"9\",\"label\":\"High\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11243,"Group":{"Id":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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 Disable Non Movement Settings","Json":"{\"name\":\"Enable Disable Non Movement Settings\",\"default\":\"\",\"description\":\"Toggle Non-movement alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle feature on Rio for raising an alarm when VIP has not moved for a specified time.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11244,"Group":{"Id":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time in non-movement\",\"type\":\"radioGroup\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":60,\"max\":36000,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time the VIP has to be still before the non-movement alarm is raised\",\"options\":[{\"label\":\"30 minutes\",\"value\":\"1800\"},{\"label\":\"1 hour\",\"value\":\"3600\"},{\"label\":\"1 hour 30 minutes\",\"value\":\"5400\"},{\"label\":\"2 hours\",\"value\":\"7200\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11315,"Group":{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6268,"Name":"Performance Settings","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The volume of the ring tone, speaker and voice prompt for the device.\",\"options\":[{\"value\":\"0\",\"label\":\"Off\"},{\"value\":\"20\",\"label\":\"Low\"},{\"value\":\"50\",\"label\":\"Medium\"},{\"value\":\"80\",\"label\":\"High\"},{\"value\":\"100\",\"label\":\"Max\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11273,"Group":{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6268,"Name":"Performance Settings","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":"SystemLanguage","Json":"{\"name\":\"SystemLanguage\",\"default\":\"\",\"description\":\"System Language\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"System Language\",\"options\":[{\"value\":\"en-US\",\"label\":\"en-US\"},{\"value\":\"nl-NL\",\"label\":\"nl-NL\"},{\"value\":\"de\",\"label\":\"de\"},{\"value\":\"fr\",\"label\":\"fr\"},{\"value\":\"pt\",\"label\":\"pt\"},{\"value\":\"es\",\"label\":\"es\"},{\"value\":\"it\",\"label\":\"it\"},{\"label\":\"zh-CN\",\"value\":\"zh-CN\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11314,"Group":{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6268,"Name":"Performance Settings","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":"AutoAnswer","Json":"{\"name\":\"AutoAnswer\",\"default\":\"true\",\"description\":\"AutoAnswer\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggles feature that enables a number in the whitelist to call through the device without any interaction required by the VIP\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11313,"Group":{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6268,"Name":"Performance Settings","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":"Allow List","Json":"{\"name\":\"Allow List\",\"default\":\"true\",\"description\":\"Allow List\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggles the allow list of members who can call the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11264,"Group":{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"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":"Mode","Json":"{\"name\":\"Mode\",\"default\":\"\",\"description\":\"Mode\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Mode settings\",\"options\":[{\"value\":\"0\",\"label\":\"No reporting\"},{\"value\":\"1\",\"label\":\"Power saving\"},{\"value\":\"2\",\"label\":\"Balanced\"},{\"value\":\"3\",\"label\":\"High frequency\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11270,"Group":{"Id":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Mode","Json":"{\"name\":\"Mode\",\"default\":\"\",\"description\":\"Mode\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Different modes for communication\",\"options\":[{\"label\":\"No reporting\",\"value\":\"0\"},{\"label\":\"Power saving\",\"value\":\"1\"},{\"label\":\"Balanced\",\"value\":\"2\"},{\"label\":\"High frequency\",\"value\":\"3\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11280,"Group":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"No Motion Alert","Json":"{\"name\":\"No Motion Alert\",\"default\":\"\",\"description\":\"No Motion Alert\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"No Motion Alert Debugging only\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11278,"Group":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Fall Settings","Json":"{\"name\":\"Fall Settings\",\"default\":\"\",\"description\":\"Fall Settings\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Fall Settings debugging only\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11297,"Group":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Emergency Number","Json":"{\"name\":\"Emergency Number\",\"default\":\"\",\"description\":\"Current Emergency Number\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"This is the number the device will call when the SOS button is pushed\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11285,"Group":{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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 Disable Fall Settings","Json":"{\"name\":\"Enable Disable Fall Settings\",\"default\":\"false\",\"description\":\"Enable Disable Fall Settings\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable Disable Fall Settings\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11286,"Group":{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"Sensitivity","Json":"{\"name\":\"Sensitivity\",\"default\":\"\",\"description\":\"Sensitivity\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"1-9 (9 high sensitivity/low trigger)\",\"options\":[{\"value\":\"3\",\"label\":\"Low\"},{\"label\":\"Medium\",\"value\":\"6\"},{\"label\":\"High\",\"value\":\"9\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11283,"Group":{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","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 Disable Non Movement Settings","Json":"{\"name\":\"Enable Disable Non Movement Settings\",\"default\":\"false\",\"description\":\"Enable Disable Non Movement Settings\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable Disable Non Movement Settings\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11284,"Group":{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","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":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time in non-movement\",\"type\":\"radioGroup\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":60,\"max\":123,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Time in non-movement\",\"options\":[{\"value\":\"1800\",\"label\":\"30 minutes\"},{\"value\":\"3600\",\"label\":\"1 hour\"},{\"value\":\"5400\",\"label\":\"1 hour 30 minutes\"},{\"value\":\"7200\",\"label\":\"2 hours\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11317,"Group":{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"System Language","Json":"{\"name\":\"System Language\",\"default\":\"\",\"description\":\"System Language\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"System Language\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11319,"Group":{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"Allow List","Json":"{\"name\":\"Allow List\",\"default\":\"\",\"description\":\"Allow List\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11319,\"Group\":{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Allow List\",\"Json\":\"{\\\"name\\\":\\\"Allow List\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Allow List\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Only authorized or all numbers to call in\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448669}],"LanguageId":null,"Tags":[]},{"Id":11324,"Group":{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":1,\"maxLength\":100,\"helpText\":\"Volume\",\"options\":[{\"label\":\"Off\",\"value\":\"0\"},{\"label\":\"Low\",\"value\":\"20\"},{\"label\":\"Medium\",\"value\":\"50\"},{\"label\":\"High\",\"value\":\"80\"},{\"label\":\"Max\",\"value\":\"100\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":3}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11324,\"Group\":{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Volume\",\"Json\":\"{\\\"name\\\":\\\"Volume\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Volume\\\",\\\"type\\\":\\\"radioGroup\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":100,\\\"helpText\\\":\\\"Volume level\\\",\\\"options\\\":[{\\\"value\\\":\\\"0\\\",\\\"label\\\":\\\"Off\\\"},{\\\"value\\\":\\\"20\\\",\\\"label\\\":\\\"Low\\\"},{\\\"value\\\":\\\"50\\\",\\\"label\\\":\\\"Medium\\\"},{\\\"value\\\":\\\"80\\\",\\\"label\\\":\\\"High\\\"},{\\\"value\\\":\\\"100\\\",\\\"label\\\":\\\"Max\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448746}],"LanguageId":null,"Tags":[]},{"Id":11328,"Group":{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"Auto Answer","Json":"{\"name\":\"Auto Answer\",\"default\":\"\",\"description\":\"Auto Answer\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Auto Answer\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11328,\"Group\":{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Auto Answer\",\"Json\":\"{\\\"name\\\":\\\"Auto Answer\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Auto Answer\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Auto Answer or Answer call by pressing button\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448712}],"LanguageId":null,"Tags":[]},{"Id":11662,"Group":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Beacon","Json":"{\"name\":\"Beacon\",\"default\":\"\",\"description\":null,\"type\":\"beacon\",\"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\":11662,\"Group\":{\"Id\":6577,\"Name\":\"Beacon List\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":10,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Beacon\",\"Json\":\"{\\\"name\\\":\\\"Beacon\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"beacon\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select beacon from the list\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449672}],"LanguageId":null,"Tags":[]},{"Id":11664,"Group":{"Id":6652,"Name":"Speed Dial","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Speed Dial","Json":"{\"name\":\"Enable Disable Speed Dial\",\"default\":\"true\",\"description\":null,\"type\":\"enable\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11665,"Group":{"Id":6652,"Name":"Speed Dial","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Speed Dial Number","Json":"{\"name\":\"Speed Dial Number\",\"default\":\"\",\"description\":null,\"type\":\"phone\",\"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\":11665,\"Group\":{\"Id\":6652,\"Name\":\"Speed Dial\",\"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\":\"Speed Dial Number\",\"Json\":\"{\\\"name\\\":\\\"Speed Dial Number\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"phone\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The number called when the Speed Dial button is pushed on the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449551}],"LanguageId":null,"Tags":[]},{"Id":11667,"Group":{"Id":6653,"Name":"Read Speed Dial Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Speed Dial Number","Json":"{\"name\":\"Speed Dial Number\",\"default\":\"\",\"description\":\"Current Speed Dial Number\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11667,\"Group\":{\"Id\":6653,\"Name\":\"Read Speed Dial Settings\",\"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\":\"Speed Dial Number\",\"Json\":\"{\\\"name\\\":\\\"Speed Dial Number\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Speed Dial Number\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The number called when the Speed Dial button is pushed on the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448507}],"LanguageId":null,"Tags":[]},{"Id":11666,"Group":{"Id":6653,"Name":"Read Speed Dial Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Read Speed Dial Settings","Json":"{\"name\":\"Enable Disable Read Speed Dial Settings\",\"default\":\"\",\"description\":null,\"type\":\"enable\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11690,"Group":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SSID","Json":"{\"name\":\"SSID\",\"default\":\"\",\"description\":\"SSID\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":1,\"maxLength\":32,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11690,\"Group\":{\"Id\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SSID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":32,\\\"helpText\\\":\\\"Add service set identifier (name) of the WiFi network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449397},{"Type":1,"NewValue":"{\"Id\":11690,\"Group\":{\"Id\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SSID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":32,\\\"helpText\\\":\\\"Add service set identifier (name) of the WiFi network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":0}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736530779}],"LanguageId":null,"Tags":[]},{"Id":11691,"Group":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":\"Password\",\"type\":\"password\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":8,\"maxLength\":16,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11691,\"Group\":{\"Id\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"password\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":8,\\\"maxLength\\\":16,\\\"helpText\\\":\\\"Add password of the WiFi network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449434},{"Type":1,"NewValue":"{\"Id\":11691,\"Group\":{\"Id\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"password\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":8,\\\"maxLength\\\":16,\\\"helpText\\\":\\\"Add password of the WiFi network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736530782}],"LanguageId":null,"Tags":[]},{"Id":11692,"Group":{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"WiFi List","Json":"{\"name\":\"WiFi List\",\"default\":\"\",\"description\":\"Current WiFi List\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11692,\"Group\":{\"Id\":6820,\"Name\":\"Read WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"WiFi List\",\"Json\":\"{\\\"name\\\":\\\"WiFi List\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current WiFi List\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"SSID and password configurated in the device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448357}],"LanguageId":null,"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"juanmi","Resource":"Command","Name":"getCurrentSettings2","Message":"(Update) (getCurrentSettings2) set parent command","Timestamp":1733390363},{"Version":"0.2","UserName":"juanmi","Resource":"Command","Name":"getCurrentSettings3","Message":"(Update) (getCurrentSettings3) set parent command","Timestamp":1733390414},{"Version":"0.2","UserName":"juanmi","Resource":"Command","Name":"getCurrentSettings4","Message":"(Update) (getCurrentSettings4) set parent command","Timestamp":1733390446},{"Version":"0.2","UserName":"juanmi","Resource":"Command","Name":"getCurrentSettings5","Message":"(Update) (getCurrentSettings5) set parent command","Timestamp":1733390475},{"Version":"0.2","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"set parent command to enable protocol import","Timestamp":1733390564},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"actionRealTimeLocation","Message":"(Update) (actionRealTimeLocation) Changed to Forced by SMS","Timestamp":1733954911},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"actionPowerOff","Message":"(Update) (actionPowerOff) changed to Forced by SMS","Timestamp":1733955031},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"actionFactoryReset","Message":"(Update) (actionFactoryReset) changed to Forced by SMS","Timestamp":1733955479},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"setGateway","Message":"(Update) (setGateway) changed to Forced by SMS","Timestamp":1733955599},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"actionDeviceReboot","Message":"(Update) (actionDeviceReboot) change to Forced by SMS","Timestamp":1734006832},{"Version":"0.3","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Change some commands to Forced by SMS","Timestamp":1734021010},{"Version":"0.4","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Pack again to test if import work","Timestamp":1734266064},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Fix Read Enable Disable Speed Dial Settings","Timestamp":1734423608},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) fix read speed dial","Timestamp":1734424064},{"Version":"0.5","UserName":"juanmi","Resource":"Command","Name":"actionConfigurationMode","Message":"(Update) (actionConfigurationMode) When Config Mode is off, set HB to 240s.","Timestamp":1734458640},{"Version":"0.5","UserName":"juanmi","Resource":"Command","Name":"setPerformanceMode","Message":"(Update) (setPerformanceMode) Check params.Controls.ConfigurationMode on or off to set HB","Timestamp":1734459146},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Get EnableDisableReadSpeedDialSettings (USER STORY 1485836)","Timestamp":1734461682},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Fix Get Status Speed Dial (\nUSER STORY 1485836)","Timestamp":1734462462},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) continue last fix","Timestamp":1734463709},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Remove prefix Ax in get Approved Numbers List (USER STORY 1485836)","Timestamp":1734463932},{"Version":"0.5","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"small fixes during Smoke Test. ConfigMode back to 240s, Get Speed Dial Status and Approved contacts list.","Timestamp":1734464663},{"Version":"0.6","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) modify case '21': // Speed Dial Settings","Timestamp":1734520814},{"Version":"0.6","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Fix get key=2 case '21': // Speed Dial Settings","Timestamp":1734521810},{"Version":"0.6","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Removed labels in Read Wifi and Beacons.","Timestamp":1734522292},{"Version":"0.6","UserName":"juanmi","Resource":"GroupParam","Name":"No Activity","Message":"(Update) (No Activity) Add noActivityInterval","Timestamp":1734525297},{"Version":"0.6","UserName":"Michael_Admin","Resource":"Command","Name":"actionFactoryReset","Message":"(Update) (actionFactoryReset) \tineedtoresetEV04!","Timestamp":1734595853},{"Version":"0.6","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Small fixes for version 1.0 - SMS reset, get Speed dial settings, etc.","Timestamp":1734605686},{"Version":"0.7","UserName":"juanmi","Resource":"Command","Name":"setGateway","Message":"(Update) (setGateway) Assign gateway_number for SMS","Timestamp":1734622575},{"Version":"0.7","UserName":"juanmi","Resource":"Command","Name":"setGateway","Message":"(Update) (setGateway) doesn't accept SMS+ Untogle Call in SMS msg","Timestamp":1734632777},{"Version":"0.7","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"SetGateWat command : doesn't accept SMS+ Untogle Call in SMS msg","Timestamp":1736339136},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable No Activity","Message":"(Update) (Enable Disable No Activity) add tag ActivateNoActivity","Timestamp":1736339464},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read WiFi List","Message":"(Update) (Read WiFi List) delete description","Timestamp":1736340151},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Fall Settings","Message":"(Update) (Read Fall Settings) delete description","Timestamp":1736340245},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Non Movement Settings","Message":"(Update) (Read Non Movement Settings) delete description","Timestamp":1736340275},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read System Settings","Message":"(Update) (Read System Settings) delete description","Timestamp":1736340297},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"WiFi List","Message":"(Update) (WiFi List) delete description","Timestamp":1736340361},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Approved Contacts","Message":"(Update) (Approved Contacts) delete description","Timestamp":1736340390},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"No Activity","Message":"(Update) (No Activity) delete description","Timestamp":1736340470},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"System Settings","Message":"(Update) (System Settings) delete description","Timestamp":1736340526},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Additional Settings","Message":"(Update) (Read Additional Settings) Reorder Groups","Timestamp":1736425387},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) Reorder Groups","Timestamp":1736425391},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Alert Settings","Message":"(Update) (Read Alert Settings) Reorder Groups","Timestamp":1736425512},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) Reorder Groups","Timestamp":1736425516},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Alert Settings","Message":"(Update) (Read Alert Settings) Reorder Groups","Timestamp":1736427634},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Additional Settings","Message":"(Update) (Read Additional Settings) Reorder Groups","Timestamp":1736427637},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) Reorder Groups","Timestamp":1736427677},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Alert Settings","Message":"(Update) (Read Alert Settings) Reorder Groups","Timestamp":1736427684},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Additional Settings","Message":"(Update) (Read Additional Settings) Reorder Groups","Timestamp":1736427688},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Alert Settings","Message":"(Update) (Alert Settings) Reorder Groups","Timestamp":1736427728},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Performance Settings","Message":"(Update) (Performance Settings) Reorder Groups","Timestamp":1736427733},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Additional Settings","Message":"(Update) (Additional Settings) Reorder Groups","Timestamp":1736427737},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"System Settings","Message":"(Update) (System Settings) Reorder Groups","Timestamp":1736427742},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Alert Settings","Message":"(Update) (Read Alert Settings) Reorder Groups","Timestamp":1736427923},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) Reorder Groups","Timestamp":1736427926},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) reorder","Timestamp":1736427938},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"WiFi List","Message":"(Update) (WiFi List) add help text","Timestamp":1736448357},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) add help text","Timestamp":1736448507},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Allow List","Message":"(Update) (Allow List) add help text","Timestamp":1736448669},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Auto Answer","Message":"(Update) (Auto Answer) add help text","Timestamp":1736448712},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Volume","Message":"(Update) (Volume) add help text","Timestamp":1736448746},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"APN","Message":"(Update) (APN) add help text","Timestamp":1736448942},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Server","Message":"(Update) (Server) add help text","Timestamp":1736449011},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"SMS Gateway","Message":"(Update) (SMS Gateway) add help text","Timestamp":1736449062},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) add help text","Timestamp":1736449397},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) add help text","Timestamp":1736449434},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) add help text","Timestamp":1736449551},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Contact","Message":"(Update) (Contact) add help text","Timestamp":1736449634},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Beacon","Message":"(Update) (Beacon) add help text","Timestamp":1736449672},{"Version":"0.8","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"UI improvements: delete descriptions, reorder groups, add help texts","Timestamp":1736449827},{"Version":"0.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1736530779},{"Version":"0.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1736530782},{"Version":"0.9","UserName":"Michael_Admin","Resource":"Group","Name":"WiFi List","Message":"(Update) (WiFi List) reorder the wifi ssid and password ","Timestamp":1736530831},{"Version":"0.9","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"reorder wifi and others","Timestamp":1737368019},{"Version":"1.0","UserName":"juanmi","Resource":"GroupParam","Name":"Server","Message":"(Update) (Server) Add Protocol-dev to servers list","Timestamp":1742495687},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Review and update the Read method For Beacons/Wifi/Whitelist - Ticket 1569531","Timestamp":1742549373},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Review and update the Read method For Whitelist","Timestamp":1742550263},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Optimize Auxiliary functions and fix sendDataToReceiver","Timestamp":1742635144},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Fix sendMessageToLocalhostNoWait (local port)","Timestamp":1742645392},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) fix sendMessageToLocalhostNoWait 2","Timestamp":1742648212},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) fix sendMessageToLocalhostNoWait 3","Timestamp":1742648816},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) sendMessageToLocalhostNoWait port to acceptance server","Timestamp":1742649832},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) typo error","Timestamp":1742649962},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) remove console.log in decoder case '03'","Timestamp":1744112746},{"Version":"1.0","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"DEV BUG 1634606 - remove console.log in decoder case '03'","Timestamp":1744134433},{"Version":"1.1","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Return from function when no Imei in server param to create the long connection. sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");","Timestamp":1744278584},{"Version":"1.1","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix tickets regarding bugs with long connection","Timestamp":1744282947},{"Version":"1.2","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Comment \"return\" in msg ASSOCIATE in msg types !=03 ","Timestamp":1744367131},{"Version":"1.2","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix issue with long connection stablishment","Timestamp":1744367491}],"ProtocolActionObjects":[],"Tags":[{"Id":2136,"Name":"OneCommandSender","BackendAction":"OneCommandSender","Value":"true"}],"MessageCodes":[{"Name":"Alarm - Movement","Description":"At alert on movement ( not fall)","Code":"ALMOV","CanLiveInsights":false},{"Name":"Alarm-Welfare Check","Description":"Welfare check alarm","Code":"ALW","CanLiveInsights":false},{"Name":"Cycle","Description":"Regular, cyclic, events from a device","Code":"CYC","CanLiveInsights":false},{"Name":"Location - other","Description":"Location - other","Code":"LOCN","CanLiveInsights":false},{"Name":"Acknowledge","Description":"Acknowledgment of a command sent to the device","Code":"ACK","CanLiveInsights":false},{"Name":"Battery Charging - On","Description":"Battery Charging - On","Code":"BATCN","CanLiveInsights":false},{"Name":"Check / keep alive / Heartbeat","Description":"Keep alive / heartbeat signal to maintain a connection ","Code":"CHK","CanLiveInsights":false},{"Name":"Alarm - Amber Alert","Description":"Alarm - Amber Alert","Code":"ALA","CanLiveInsights":false},{"Name":"Alarm – Fall","Description":"Alarm – Fall","Code":"ALF","CanLiveInsights":false},{"Name":"Alarm – Non movement","Description":"Alarm – Non movement","Code":"ALNM","CanLiveInsights":false},{"Name":"Alarm - Smoke","Description":"Alarm - Smoke","Code":"ALSM","CanLiveInsights":false},{"Name":"Alarm - Speed","Description":"Alarm - Speed","Code":"ALSP","CanLiveInsights":false},{"Name":"Alarm – Emergency Cancelled","Description":"Alarm – Emergency Cancelled by the user","Code":"ALSOS-C","CanLiveInsights":false},{"Name":"Battery Charging - off","Description":"Battery Charging - off","Code":"BATCF","CanLiveInsights":false},{"Name":"Battery empty","Description":"Battery empty","Code":"BATE","CanLiveInsights":false},{"Name":"Battery full","Description":"Battery full","Code":"BATF","CanLiveInsights":false},{"Name":"Battery low","Description":"Battery low","Code":"BATL","CanLiveInsights":false},{"Name":"Button Press","Description":"Button Press","Code":"BPRS","CanLiveInsights":false},{"Name":"Ebeacon zone in","Description":"Ebeacon zone in","Code":"EBZI","CanLiveInsights":false},{"Name":"Ebeacon zone out","Description":"Ebeacon zone out","Code":"EBZO","CanLiveInsights":false},{"Name":"Location check in","Description":"Location check in","Code":"LCI","CanLiveInsights":false},{"Name":"Location check out","Description":"Location check out","Code":"LCO","CanLiveInsights":false},{"Name":"Reminder not ok","Description":"Reminder not ok","Code":"MRME","CanLiveInsights":false},{"Name":"No Activity","Description":"No Activity","Code":"NACT","CanLiveInsights":false},{"Name":"Power Off","Description":"Power Off","Code":"PWRF","CanLiveInsights":false},{"Name":"Power On","Description":"Power On","Code":"PWRN","CanLiveInsights":false},{"Name":"Vehicle - Driving hours excess","Description":"Vehicle - Driving hours excess","Code":"VDE","CanLiveInsights":false},{"Name":"Vehicle – Fuel cap","Description":"Vehicle – Fuel cap","Code":"VFC","CanLiveInsights":false},{"Name":"Vehicle - Fuel level","Description":"Vehicle - Fuel level","Code":"VFL","CanLiveInsights":false},{"Name":"Vehicle – Harsh braking","Description":"Vehicle – Harsh braking","Code":"VHB","CanLiveInsights":false},{"Name":"Vehicle – Ignition off","Description":"Vehicle – Ignition off","Code":"VIGF","CanLiveInsights":false},{"Name":"Vehicle – Driver not authorized","Description":"Vehicle – Driver not authorized","Code":"VNA","CanLiveInsights":false},{"Name":"Vehicle – Night driving","Description":"Vehicle – Night driving","Code":"VND","CanLiveInsights":false},{"Name":"Vehicle – Ignition on","Description":"Vehicle – Ignition on","Code":"VIGN","CanLiveInsights":false},{"Name":"Vehicle – Seat belt","Description":"Vehicle – Seat belt","Code":"VSB","CanLiveInsights":false},{"Name":"Zone in","Description":"Zone in","Code":"ZNI","CanLiveInsights":false},{"Name":"Zone out","Description":"Zone out","Code":"ZNO","CanLiveInsights":false},{"Name":"Device Status","Description":"Device Status","Code":"STATUS","CanLiveInsights":false},{"Name":"Real time location ","Description":"Real time location ","Code":"RTL","CanLiveInsights":false},{"Name":"Encoded communication","Description":"Encoded communication","Code":"ENC","CanLiveInsights":false},{"Name":"Proximity","Description":"Proximity alert ","Code":"PROX","CanLiveInsights":false},{"Name":"Dummy - do NOT use ","Description":"Dummy template - should not be used","Code":"DUMMY","CanLiveInsights":false},{"Name":"Battery High","Description":"Battery High","Code":"BATH","CanLiveInsights":false},{"Name":"Location - Set Available","Description":"Location - Set Available","Code":"LSA","CanLiveInsights":false},{"Name":"Location - Set Busy","Description":"Location - Set Busy","Code":"LSB","CanLiveInsights":false},{"Name":"Device information","Description":"General Device Information from the device","Code":"INFO","CanLiveInsights":false},{"Name":"Alarm - Tamper","Description":"Alarm - Device Tamper","Code":"ALTAM","CanLiveInsights":false},{"Name":"Communication ","Description":"General communication, initialisation etc.","Code":"COMM","CanLiveInsights":false},{"Name":"Humidity","Description":"Relative humidity","Code":"RH","CanLiveInsights":false},{"Name":"Temperature","Description":"Temperature","Code":"TEMP","CanLiveInsights":false},{"Name":"Alarm - Temperature","Description":"Alarm - Temperature","Code":"ALTEMP","CanLiveInsights":false},{"Name":"Alarm - Humidity","Description":"Alarm - Relative Humidity","Code":"ALRH","CanLiveInsights":false},{"Name":"Proximity End","Description":"Proximity End","Code":"PROX-E","CanLiveInsights":false},{"Name":"Alarm - PIR","Description":"Alarm - PIR","Code":"ALPIR","CanLiveInsights":false},{"Name":"PIR - Movements","Description":"Number of PIR movements detected in reporting period","Code":"PIRM","CanLiveInsights":false},{"Name":"Battery Report","Description":"Battery Voltage Report","Code":"BATR","CanLiveInsights":false},{"Name":"Alarm - Sim Swap","Description":"Alarm - Sim Swap","Code":"ALSS","CanLiveInsights":false},{"Name":"Mileage","Description":"Mileage","Code":"MIL","CanLiveInsights":false},{"Name":"Intrusion","Description":"Intrusion","Code":"INT","CanLiveInsights":false},{"Name":"No Fix Report","Description":"No fix report","Code":"NFR","CanLiveInsights":false},{"Name":"Switched Off Report","Description":"Switched off report","Code":"SOR","CanLiveInsights":false},{"Name":"End - Shift","Description":"End - Shift","Code":"ENDSH","CanLiveInsights":false},{"Name":"Sleep Mode","Description":"Device comes to sleep mode","Code":"SPM","CanLiveInsights":false},{"Name":"Wake Up Device","Description":"Device Wake Up from SleepMode","Code":"WUD","CanLiveInsights":false},{"Name":"Door Closed","Description":"Door Closed","Code":"DRCL","CanLiveInsights":false},{"Name":"Door Open","Description":"Door Open","Code":"DRO","CanLiveInsights":false},{"Name":"Alarm Door Closed","Description":"Alarm Door Closed","Code":"ALDC","CanLiveInsights":false},{"Name":"Alarm Door Open","Description":"Alarm Door Open","Code":"ALDO","CanLiveInsights":false},{"Name":"Alarm - Amber Alert - Snooze","Description":"Amber Alert Alarm - snoozed by user","Code":"ALA-S","CanLiveInsights":false},{"Name":"Amber Alert - On","Description":"Amber Alert Alarm created by User","Code":"ALA-O","CanLiveInsights":false},{"Name":"Reminder OK","Description":"Reminder OK","Code":"MRMK","CanLiveInsights":false},{"Name":"Message - text","Description":"Message- text","Code":"MSG","CanLiveInsights":false},{"Name":"Start - Shift","Description":"Start- Shift","Code":"STSH","CanLiveInsights":false},{"Name":"Beacon","Description":"Beacon","Code":"BT","CanLiveInsights":false},{"Name":"Alarm - Amber Alert - Cancel","Description":"Amber alert alarm, cancelled by user","Code":"ALA-C","CanLiveInsights":false},{"Name":"Alarm-Impact","Description":"Alarm-Impact","Code":"ALI","CanLiveInsights":false},{"Name":"Reminder Snooze ","Description":"Reminder - snooze","Code":"MRM-S","CanLiveInsights":false},{"Name":"Blood Pressure","Description":"Blood Pressure","Code":"HBP","CanLiveInsights":false},{"Name":"Heart Rate","Description":"Heart Rate","Code":"HRT","CanLiveInsights":false},{"Name":"SELFTEST","Description":"Used for Testing Purposes","Code":"TEST","CanLiveInsights":false},{"Name":"Alarm - Fall Cancelled","Description":"Alarm - Fall Cancelled","Code":"ALF-C","CanLiveInsights":false},{"Name":"Alarm – Non Movement Cancelled","Description":"Alarm – Non movement Cancelled by the user","Code":"ALNM-C","CanLiveInsights":false},{"Name":"Insight","Description":"Insight","Code":"INSIGHT","CanLiveInsights":false},{"Name":"Quantity Drunk","Description":"Quantity of liquid drunk ","Code":"QDRNK","CanLiveInsights":false},{"Name":"Bed - in","Description":"Bed or seat sensor ","Code":"BEDIN","CanLiveInsights":false},{"Name":"Bed - Out","Description":"Bed / seat sensor","Code":"BEDOUT","CanLiveInsights":false},{"Name":"Leak sensor","Description":"Leak detected ","Code":"LEAK","CanLiveInsights":false},{"Name":"Light - Lux","Description":"Light levels - LUX ","Code":"LUX","CanLiveInsights":false},{"Name":"Exited","Description":"Exited","Code":"EXIT","CanLiveInsights":false},{"Name":"Entered","Description":"Entered","Code":"ENTER","CanLiveInsights":false},{"Name":"Answered Door","Description":"Answered Door","Code":"ANSWDR","CanLiveInsights":false},{"Name":"Alarm – Emergency","Description":"Alarm – Emergency","Code":"ALSOS","CanLiveInsights":true},{"Name":"Alarm – Gas","Description":"Alarm – Gas ( carbon monixide, carbon dioxide, propane, butane ) ","Code":"ALG","CanLiveInsights":false},{"Name":"Leak Off","Description":"Leak detection has stopped alerting","Code":"LEAK-OFF","CanLiveInsights":false},{"Name":"Question-Answer","Description":"Question - Answer response","Code":"Q-A","CanLiveInsights":false},{"Name":"Visitor Arrived","Description":"Visitor Arrived","Code":"VISARR","CanLiveInsights":true},{"Name":"Visitor Departed","Description":"Visitor Departed","Code":"VISDEP","CanLiveInsights":true},{"Name":"Docked","Description":"Device placed in docking station","Code":"DOCK-IN","CanLiveInsights":false},{"Name":"Undocked","Description":"Device removed from docking station","Code":"DOCK-OUT","CanLiveInsights":false},{"Name":"Gas concentrarion","Description":"Gas concentrarion (ppm)","Code":"GAS","CanLiveInsights":false},{"Name":"Distance ","Description":"Distance measurement, could be level, proximity etc ","Code":"DIST","CanLiveInsights":false},{"Name":"Alarm Distance","Description":"Alarm on distance measurement, could be level, proximity etc ","Code":"ALDIST","CanLiveInsights":false},{"Name":"Welfare OK","Description":"Welfare check has returned OK","Code":"WELFOK","CanLiveInsights":false},{"Name":"Steps","Description":"Step counter","Code":"STEPS","CanLiveInsights":true},{"Name":"Connection","Description":"Connection","Code":"CON","CanLiveInsights":false},{"Name":"Disconnection","Description":"Disconnect","Code":"DISCON","CanLiveInsights":false},{"Name":"Position By Button","Description":"Position By Button","Code":"PBB","CanLiveInsights":false},{"Name":"Alarm Welfare","Description":"Alert welfare not confirmed","Code":"ALA-W","CanLiveInsights":false},{"Name":"Welfare Timer Starts","Description":"Welfare Check in","Code":"WTS","CanLiveInsights":false},{"Name":"Welfare Stops","Description":"Welfare Check out","Code":"WSTP","CanLiveInsights":false},{"Name":"Alarm Ended","Description":"Alarm finished","Code":"ALA-F","CanLiveInsights":false},{"Name":"BRTH - Breath Rate","Description":"Rate of Breathing per minute","Code":"BRTH","CanLiveInsights":false},{"Name":"Sleep State","Description":"Sleep state ","Code":"SLPSTATE","CanLiveInsights":false},{"Name":"Alarm - Tilt","Description":"Alarm - Tilt Alert","Code":"ALTLT","CanLiveInsights":false},{"Name":"Alert – Fall Suspected","Description":"Alert – Fall Suspected","Code":"ALFS","CanLiveInsights":false}]} \ No newline at end of file +{"Id":224,"Name":null,"Description":null,"FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","InProgress":false,"MessageTypes":[{"Id":7358,"Code":"ACK-SPEED","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-SPEED;<>;","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":"^Roam;ACK-SPEED;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":7357,"Code":"ACK-WIFI","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-WIFI;<>;","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":"^Roam;ACK-WIFI;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6945,"Code":"ACK-VOL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-VOL;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5014,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar value = '34'; //10 Ring tone Volume\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":24},"CacheImei":false,"RegEx":"^Roam;ACK-VOL;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6940,"Code":"ACK-FALLALERT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-FALLALERT;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5007,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getFallDownAlert","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '56'; //Fall down Alert code\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":8},"CacheImei":false,"RegEx":"^Roam;ACK-FALLALERT;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6939,"Code":"ACK-NOMOTION","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-NOMOTION;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5008,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getNoMotionAlert","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '53'; //No motion Alert code\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":7},"CacheImei":false,"RegEx":"^Roam;ACK-NOMOTION;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6938,"Code":"ACK-CUSTID","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-CUSTID;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5010,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCustomId","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '47'; //Get device or custom id \r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":8},"CacheImei":false,"RegEx":"^Roam;ACK-CUSTID;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6937,"Code":"ACK-MODE","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-MODE;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5005,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getPerformanceMode","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '44'; //time interval\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\n/* IMEI:863921033969786\r\nGSM signal quality: 15\r\nSoftware version: V07BX.8601.2109\r\nversion: V1.0.29.1 */\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":7,"Order":23},"CacheImei":false,"RegEx":"^Roam;ACK-MODE;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6936,"Code":"ACK-LANG","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-LANG;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":5004,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getSystemLanguage","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '1F'; //System language - locale\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data); // For GPRS command\r\nAddValue('sequenceNumber', sequenceID);\r\n//AddValueSMS('dataSMS', dataSMS); // For SMS command\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":3,"Order":22},"CacheImei":false,"RegEx":"^Roam;ACK-LANG;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6880,"Code":"ALSP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALSP;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALSP;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6888,"Code":"ALA-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ALA-S;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-ALA-S;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6929,"Code":"ACK-FIRM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-FIRM;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4957,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getFirmwareVersion","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar value = '1A'; //Ask for firmware Long\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'V?';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":16},"CacheImei":false,"RegEx":"^Roam;ACK-FIRM;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6912,"Code":"STP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-STP;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;STP=<>;LABEL=<>","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":"^Roam-STP;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;STP=[^;;]*;LABEL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6885,"Code":"Alert Finalized","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-SOSEnding;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-SOSEnding;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6864,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>","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":"^Roam-CYC;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6910,"Code":"CHK","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-HTB;<>;STATUS=<>;TIME=<>;BATP=<>;SIGNAL=<>;WM=<>;GENERAL=<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Eview-HTB;[^;]*;STATUS=[^;;]*;TIME=[^;;]*;BATP=[^;;]*;SIGNAL=[^;;]*;WM=[^;;]*;GENERAL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6891,"Code":"BATL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-BATL;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-BATL;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6892,"Code":"BATF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-BATF;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-BATF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6894,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALNM;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALNM;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6875,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALSOS;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALSOS;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6896,"Code":"ALMOV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALMOV;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALMOV;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6899,"Code":"ALA","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALA;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALA;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6884,"Code":"F-ACK-No Memory","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300CFB3<>7F0125","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":"^Roam-ACK;[^;]*;AB000300CFB3[^ ]*7F0125","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6901,"Code":"F-ACK-Invalid Parameter","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300EEA3<>7F0124","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":"^Roam-ACK;[^;]*;AB000300EEA3[^ ]*7F0124","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6889,"Code":"F-ACK-Data Size Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB00030028C3<>7F0122","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":"^Roam-ACK;[^;]*;AB00030028C3[^ ]*7F0122","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6905,"Code":"F-ACK-Command Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003009C85<>7F0115","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":"^Roam-ACK;[^;]*;AB0003009C85[^ ]*7F0115","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6865,"Code":"ACK-Out Of Service","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003005BF1<>7F0130","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":"^Roam-ACK;[^;]*;AB0003005BF1[^ ]*7F0130","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6935,"Code":"ACK-HB-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set heart beat<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4918,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionConfigurationMode","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nif (params.Controls.ConfigurationMode == 'true') {\r\n var data = `GPRSHB1M`;\r\n} else {\r\n var data = `GPRSHB0M`; //`GPRSHB240S`;\r\n}\r\nAddValue('data', data);\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^Set heart beat[^t]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6934,"Code":"ACK-EPHONE","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set contact number 1 ok.|Configuracin numero contacto 1 ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4962,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setEmergencySettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar messageBody = '02';\r\nvar key = '30';\r\nvar phone_number = '00000000000';\r\nvar numberHex = '';\r\nvar sosKeyLength = '00';\r\n//var confFall = '1100'; // Enable, Dial\r\nvar confSOS = '10100000'; // Enable, no SMS, Toggle Call, No Sim Dialing, Contact Number 1\r\nvar dataSMS = '';\r\nif (params.AlertSettings.EmergencyNumber) {\r\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\r\n phone_number = params.AlertSettings.EmergencyNumber;\r\n numberHex = ascii_to_hexa(phone_number).toUpperCase();\r\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n messageBody += sosKeyLength + key + confSOS + numberHex;\r\n dataSMS = `A1,0,1,${phone_number}`;\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLength = changeEndianness(totalLength);\r\n//totalLength = '1000'; //better to calculate it\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":3},"CacheImei":false,"RegEx":"^(Set contact number 1 ok.|Configuracin numero contacto 1 ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6933,"Code":"ACK-SERV-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"GRPS:<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4954,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings5","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'GPRS?'; // Check Server Details\r\n/*GRPS: ON\r\nAPN: internet\r\nUsername:\r\nPassword:\r\nIP: 1, www.smart-locator.com\r\nPort: 6060\r\nMove report time: 30 minutes\r\nNo move report time: 60 minutes\r\nHB: on, 20 minutes */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"CommandToUpdateId":null,"ParentId":3687,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":21},"CacheImei":false,"RegEx":"^GRPS:[^:]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6932,"Code":"ACK-CONTAC-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"A1:<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4955,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings4","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'A?'; // Check Contact List\r\n/* A1: 1,1,15899795842\r\nA2: 1,0,13632770106\r\nA3: 0,1,15986236978 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"CommandToUpdateId":null,"ParentId":3687,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":20},"CacheImei":false,"RegEx":"^A1:[^:]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6931,"Code":"ACK-BEAC-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"1,<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4956,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings3","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'BCQ1'; // Check Beacon List\r\n/* 1,F7:37:B7:10:81:CE,office1\r\n2,C4:9F:A6:15:24:3F,office2\r\n3,D3:E3:AC:86:5E:46,office7 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"CommandToUpdateId":null,"ParentId":3687,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":19},"CacheImei":false,"RegEx":"^1,[^,]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6930,"Code":"ACK-FALLSENS-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Mode:<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4968,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings2","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'status'; // Check fall sens (function settings)\r\n/* Mode:4,0 second\r\nLED: on\r\nBeep: on\r\nVibration: on\r\nTime zone: +10:00\r\nGEO Fence:0,0,0,0\r\nMotion alarm: off\r\nNo Motion alarm: off\r\nTilt alert: off\r\nFall alarm: on, level:5\r\nLow power alarm: on,15%\r\nSOS Call:10 minutes, loop:1 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"CommandToUpdateId":null,"ParentId":3687,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":18},"CacheImei":false,"RegEx":"^Mode:[^:]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6928,"Code":"ACK-FIRM-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"IMEI:<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4958,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '214A1A3440414243567356101F4453473330';\r\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\n//var keyLength = '10'; // previous\r\nvar keyLength = '13';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":17},"CacheImei":false,"RegEx":"^IMEI:[^:]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6927,"Code":"ACK-GDATA","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-GDATA;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4958,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getCurrentSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '214A1A3440414243567356101F4453473330';\r\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\n//var keyLength = '10'; // previous\r\nvar keyLength = '13';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":17},"CacheImei":false,"RegEx":"^Roam;ACK-GDATA;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6926,"Code":"ACK-SRV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set IP ok.|Configuracin de IP OK}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4959,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setServer","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local APN':\r\n//var params = {CommunicationSettings:{'SMSGateway':'+34666777888,Esendex','APN':'','APNOld':'','Server':'52.174.17.77,5678','ServerOld':''}}\r\n// AB101B 0066840300 021043802E1635322E3137342E31372E373704406D326D01410142\r\n// AB1015 00 66 84 F5 4B 02 10 43 80 2E 16 35 32 2E 31 37 34 2E 31 37 2E 37 37 04 40 6D 32 6D 01 41 01 42 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) APN and Server and Gateway Number\r\nvar messageBody = '02';\r\n// Server\r\nvar domain = '';\r\nvar port = '';\r\nvar serverLength = '00';\r\n// APN\r\nvar apn = '';\r\nvar apn_password = '';\r\nvar apn_username = '';\r\nvar apnLength = '00';\r\nvar apnUserLength = '00';\r\nvar apnPassLength = '00';\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n domain = serverString[0];\r\n port = serverString[1];\r\n port = changeEndianness(decimalToHex(parseInt(port))).toUpperCase();\r\n // Server IP and Port\r\n domain = ascii_to_hexa(domain).toUpperCase();\r\n serverLength = ('00' + decimalToHex(2 + port.length / 2 + domain.length / 2)).slice(-2).toUpperCase();\r\n // key 43 and TCP and GPRS is 80\r\n messageBody += serverLength + \"4380\" + port + domain;\r\n // For SMS\r\n dataSMS = `IP1,${serverString[0]},${serverString[1]}`;\r\n}\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n // APN\r\n apn = apnString[0];\r\n apn = ascii_to_hexa(apn).toUpperCase();\r\n apnLength = ('00' + decimalToHex(1 + apn.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnLength + \"40\" + apn;\r\n // APN username\r\n apn_username = apnString[1];\r\n apn_username = ascii_to_hexa(apn_username).toUpperCase();\r\n apnUserLength = ('00' + decimalToHex(1 + apn_username.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnUserLength + \"41\" + apn_username;\r\n // APN passwprd\r\n apn_password = apnString[2];\r\n apn_password = ascii_to_hexa(apn_password).toUpperCase();\r\n apnPassLength = ('00' + decimalToHex(1 + apn_password.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnPassLength + \"42\" + apn_password;\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":1},"CacheImei":false,"RegEx":"^(Set IP ok.|Configuracin de IP OK)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6925,"Code":"ACK-GTW","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set contact number 10 ok.|Configuracin numero contacto 10 ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4960,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setGateway","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar messageBody = '02';\r\nvar key = '30';\r\nvar phone_number = '00000000000';\r\nvar numberHex = '';\r\nvar sosKeyLength = '00';\r\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.SMSGateway) {\r\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\r\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\r\n var gateway = gatewayString[1];\r\n gateway_number = gatewayString[0];\r\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\r\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n messageBody += sosKeyLength + key + confSOS + numberHex;\r\n dataSMS = `A10,1,0,${phone_number}`;\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLength = changeEndianness(totalLength);\r\n//totalLength = '1000'; //better to calculate it\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":2},"CacheImei":false,"RegEx":"^(Set contact number 10 ok.|Configuracin numero contacto 10 ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6924,"Code":"ACK-FALLSENS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set fall down alarm ok!|Configuracin alarma caida ok!}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4961,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setFallSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) Fall sensitivity\r\nvar messageBody = '02';\r\nvar sensitivity = '';\r\nvar dataSMS = '';\r\nvar value = ''\r\nif (params.FallSettings.EnableDisableFallSettings == 'true') {\r\n value += '1'\r\n value += '100' //Dial\r\n //}\r\n if (params.FallSettings.Sensitivity) {\r\n var sensiString = params.FallSettings.Sensitivity.split(',');\r\n var level = sensiString[1];\r\n sensitivity = parseInt(sensiString[0]);\r\n // For SMS\r\n dataSMS = `FL1,${sensitivity},1`;\r\n //numberHex = ascii_to_hexa(sensitivity).toUpperCase();\r\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\r\n value += sensitivity\r\n }\r\n} else {\r\n value = '00000000'\r\n dataSMS = `FL0,1,1`;\r\n}\r\n// create HEADER\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\r\nvar command = '02'\r\nvar keyLength = '02'\r\nvar key = '56'\r\nvar messageBody = command + keyLength + key + value\r\nvar checksum = byteStringToByteArray(messageBody)\r\nchecksum = crc16byte(checksum)\r\nchecksum = decimalToHex(checksum)\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\r\nchecksum = changeEndianness(checksum)\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\r\nvar data = prefix + messageBody\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":4},"CacheImei":false,"RegEx":"^(Set fall down alarm ok!|Configuracin alarma caida ok!)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6923,"Code":"ACK-APN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set APN ok.|Configuracin APN OK.}}","HasTemplateGlobal":false,"ResponseTemplate":"ok1","TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4963,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setAPN","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local APN':\r\n//var params = {CommunicationSettings:{'SMSGateway':'+34666777888,Esendex','APN':'','APNOld':'','Server':'52.174.17.77,5678','ServerOld':''}}\r\n// AB101B 0066840300 021043802E1635322E3137342E31372E373704406D326D01410142\r\n// AB1015 00 66 84 F5 4B 02 10 43 80 2E 16 35 32 2E 31 37 34 2E 31 37 2E 37 37 04 40 6D 32 6D 01 41 01 42 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) APN and Server and Gateway Number\r\nvar messageBody = '02';\r\n// Server\r\nvar domain = '';\r\nvar port = '';\r\nvar serverLength = '00';\r\n// APN\r\nvar apn = '';\r\nvar apn_password = '';\r\nvar apn_username = '';\r\nvar apnLength = '00';\r\nvar apnUserLength = '00';\r\nvar apnPassLength = '00';\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n domain = serverString[0];\r\n port = serverString[1];\r\n port = changeEndianness(decimalToHex(parseInt(port))).toUpperCase();\r\n // Server IP and Port\r\n domain = ascii_to_hexa(domain).toUpperCase();\r\n serverLength = ('00' + decimalToHex(2 + port.length / 2 + domain.length / 2)).slice(-2).toUpperCase();\r\n // key 43 and TCP and GPRS is 80\r\n messageBody += serverLength + \"4380\" + port + domain;\r\n}\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n // APN\r\n apn = apnString[0];\r\n apn = ascii_to_hexa(apn).toUpperCase();\r\n apnLength = ('00' + decimalToHex(1 + apn.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnLength + \"40\" + apn;\r\n // APN username\r\n apn_username = apnString[1];\r\n apn_username = ascii_to_hexa(apn_username).toUpperCase();\r\n apnUserLength = ('00' + decimalToHex(1 + apn_username.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnUserLength + \"41\" + apn_username;\r\n // APN passwprd\r\n apn_password = apnString[2];\r\n apn_password = ascii_to_hexa(apn_password).toUpperCase();\r\n apnPassLength = ('00' + decimalToHex(1 + apn_password.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnPassLength + \"42\" + apn_password;\r\n // For SMS\r\n dataSMS = `S1,${apnString[0]},${apnString[1]},${apnString[2]}`;\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":0},"CacheImei":false,"RegEx":"^(Set APN ok.|Configuracin APN OK.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6922,"Code":"ACK-RTL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Device location request have received!|Solicitud de ubicacin recibida!}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4964,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionRealTimeLocation","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '01';\r\nvar key = '12';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\nGPS Loc!\r\nNow:\r\nLoc Time:07/04/2021 17:36:44\r\nSpeed:0km/h\r\nAltitude:97.0\r\nBattery:57%\r\nwww.google.com/maps?q=22.6537233,114.0006070\r\n*/\r\nvar dataSMS = 'loc';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":10},"CacheImei":false,"RegEx":"^(Device location request have received!|Solicitud de ubicacin recibida!)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6921,"Code":"ACK-TRACE","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Set live tracking","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4965,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionTrace","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '01';\r\nvar key = '13';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\nSet live tracking every 10 seconds and last for 10 minutes ok.\r\n*/\r\nvar dataSMS = 'CL10s,600s'; // CL(interval),(duration)\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":3,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":11},"CacheImei":false,"RegEx":"^Set live tracking","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6920,"Code":"ACK-GSRV","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-GSRV;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4966,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getServer","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar value = '43'; //Ask for Server\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":null},"CacheImei":false,"RegEx":"^Roam;ACK-GSRV;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6919,"Code":"ACK-GAPN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam;ACK-GAPN;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4967,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"getAPN","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar value = '40'; //Ask for APN\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":2,"Order":null},"CacheImei":false,"RegEx":"^Roam;ACK-GAPN;[^;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6918,"Code":"ACK-OFF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Power OFF!!!","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4971,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionPowerOff","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '14';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'off';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":14},"CacheImei":false,"RegEx":"^Power OFF!!!","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6917,"Code":"ACK-FLU","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{flush ok.|Borrar ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4969,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionDeleteRecords","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '10';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'flush';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":9},"CacheImei":false,"RegEx":"^(flush ok.|Borrar ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6916,"Code":"ACK-RST","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Set ok.|reset ok.|Reiniciar ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4981,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionFactoryReset","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nvar configsSMS = [];\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '04';\nvar keyLength = '01';\nvar key = '11';\nvar messageBody = command + keyLength + key;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\nvar data = prefix + messageBody;\n// For GPRS command\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\n// For SMS command\nvar dataSMS = 'ineedtoresetEV-06A!';\nAddValueSMS('dataSMS', dataSMS);\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS\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) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":15},"CacheImei":false,"RegEx":"^(Set ok.|reset ok.|Reiniciar ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6915,"Code":"ACK-PREFIX","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"remove prefix ok.","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4984,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"setSMSPrefix","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nif (params.SMSPrefix.SMSPrefix == 'true') { //Enable Prefix for SMS anwers\r\n if (params.SMSPassword.SMSPasswordOld) {\r\n var data = `${params.SMSPassword.SMSPasswordOld}Prefix1,Rio-${serverParams.Imei}-`;\r\n } else {\r\n var data = `Prefix1,Rio-${serverParams.Imei}-`;\r\n }\r\n} else {\r\n var data = `Prefix0,`; //Disable Prefix for SMS anwers\r\n}\r\nAddValue('data', data);\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":2,"Order":null},"CacheImei":false,"RegEx":"^remove prefix ok.","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6914,"Code":"RTL-GPS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{Now:Loc Time: |Ubicacin GPS:Tiempo de Loc: }}<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4983,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionRequestLocation","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nif (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}loc`\n} else {\n var data = `loc`\n}\nAddValue('data', data)\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":2,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":4,"Order":null},"CacheImei":false,"RegEx":"^(Now:Loc Time: |Ubicacin GPS:Tiempo de Loc: )[^)]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6913,"Code":"ACK-RBT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"{{reboot ok.|Reiniciar ok.}}","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":4982,"Protocol":{"Id":224,"Code":"Access TEC Roam","Version":"0.1","FirmwareVersion":"V04b.8601.2411.1.0.16.4411.2409.25","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":false},"Name":"actionDeviceReboot","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '12';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'reboot';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":4,"Order":13},"CacheImei":false,"RegEx":"^(reboot ok.|Reiniciar ok.)","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6911,"Code":"F-ACK-Invalid State","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB00030009D3<>7F0123","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":"^Roam-ACK;[^;]*;AB00030009D3[^ ]*7F0123","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6909,"Code":"ZNO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"+RESP:ZOUT,<>,<>,<>,<>,<>,<>,<>,<>$","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":"\\+RESP:ZOUT,[^,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6908,"Code":"ZNI","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"+RESP:ZIN,<>,<>,<>,<>,<>,<>,<>,<>$","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":"\\+RESP:ZIN,[^,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6907,"Code":"F-ACK-GPS Is Not Ready","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003008D93<>7F0127","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":"^Roam-ACK;[^;]*;AB0003008D93[^ ]*7F0127","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6906,"Code":"F-ACK-Data Format Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003004BF3<>7F0121","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":"^Roam-ACK;[^;]*;AB0003004BF3[^ ]*7F0121","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6904,"Code":"F-ACK-Key Length Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300DEA5<>7F0117","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ACK;[^;]*;AB000300DEA5[^ ]*7F0117","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6903,"Code":"CHK-ASSO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview-ASSOCIATE;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Eview-ASSOCIATE;[^;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6902,"Code":"RTL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-RTL;<>;<>;<>;<>;<>;<>;<>;<>;<>;","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":"^Roam-RTL;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6900,"Code":"F-ACK-SubFunction Not Supported","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300AC83<>7F0126","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":"^Roam-ACK;[^;]*;AB000300AC83[^ ]*7F0126","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6898,"Code":"ALA-C","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ALA-C;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-ALA-C;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6897,"Code":"ALF-C","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ALF-C;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-ALF-C;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6895,"Code":"ALF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"Roam-ALF;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ALF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6893,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-BATCF;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-BATCF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6890,"Code":"COMM-SMS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-SMS;<>;<>","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":"esendex<>esendex<>","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-SMS;[^;]*;[^;]*","RegExGlobal":"^esendex[^e]*esendex[^x]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6887,"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":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6886,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-BATCN;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-BATCN;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6883,"Code":"ALA-O","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ALA-O;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","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":"^Roam-ALA-O;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6882,"Code":"ENC-2","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"","HasTemplateGlobal":true,"ResponseTemplate":"<>","TemplateGlobal":"AB00<>","LongConnection":true,"HexString":true,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"","RegExGlobal":"^AB00[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6881,"Code":"RTL-BEACON","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Beacon:Loc Time: <>","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":"^Beacon:Loc Time: [^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6879,"Code":"ENC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":true,"NoOperation":false,"Type":0,"Template":"","HasTemplateGlobal":true,"ResponseTemplate":"<>","TemplateGlobal":"AB10<>","LongConnection":true,"HexString":true,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"","RegExGlobal":"^AB10[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6878,"Code":"PWRN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-PWRN;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-PWRN;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6877,"Code":"PWRF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-PWRF;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-PWRF;[^;]*;STATUS=[^;;]*;LTIME=[^;;]*;ETIME=[^;;]*;BATP=[^;;]*;LGPS=[^;;]*;LWIF=[^;;]*;LLBS=[^;;]*;LBEACON=[^;;]*;BLE=[^;;]*;GENERAL=[^;;]*;[^;]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6876,"Code":"HRT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-HRT;<>;STATUS=<>;ETIME=<>;GENERAL=<>;<>;HRT=<>;TLEVEL=<>;LABEL=<>","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":"^Roam-HRT;[^;]*;STATUS=[^;;]*;ETIME=[^;;]*;GENERAL=[^;;]*;[^;;]*;HRT=[^;;]*;TLEVEL=[^;;]*;LABEL=[^=]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6874,"Code":"RTL-WIFI","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Wifi and GSM:Loc Time: <>","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":"^Wifi and GSM:Loc Time: [^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6873,"Code":"F-ACK-Key Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300FFB5<>7F0116","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":"^Roam-ACK;[^;]*;AB000300FFB5[^ ]*7F0116","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6872,"Code":"COMM-GT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Eview;<>;<>;Get timestamp","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Eview;[^;]*;[^;;]*;Get timestamp","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6871,"Code":"F-ACK-Checksum Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300BD95<>7F0114","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":"^Roam-ACK;[^;]*;AB000300BD95[^ ]*7F0114","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6870,"Code":"ACK-global","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB00030008C7<>7F0100","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":true,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^Roam-ACK;[^;]*;AB00030008C7[^ ]*7F0100","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6869,"Code":"F-ACK-Length Error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003005AE5<>7F0113","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":"^Roam-ACK;[^;]*;AB0003005AE5[^ ]*7F0113","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6868,"Code":"F-ACK-Encryption Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003007BF5<>7F0112","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":"^Roam-ACK;[^;]*;AB0003007BF5[^ ]*7F0112","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6867,"Code":"F-ACK-Version Invalid","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB00030018C5<>7F0111","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":"^Roam-ACK;[^;]*;AB00030018C5[^ ]*7F0111","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6866,"Code":"F-ACK-Address Resp","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB0003006262<>7F0128","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":"^Roam-ACK;[^;]*;AB0003006262[^ ]*7F0128","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6863,"Code":"F-ACK-BLE Password","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"Roam-ACK;<>;AB000300CC8F<>7F0140","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":"^Roam-ACK;[^;]*;AB000300CC8F[^7;]*7F0140","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]}],"Commands":[{"Id":5348,"Name":"setWifiList","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local WIFI Settings':\r\n//var params = {WiFiConnect:{'EnableDisableWiFiConnect':'false','SSID':'wifi_name','Password':'wifi_password'}}\r\n// Test enabled\r\n// AB 10 1C 00 98 78 00 00 02 1A 4A 80 09 0D 77 69 66 69 5F 6E 61 6D 65 77 69 66 69 5F 70 61 73 73 77 6F 72 64 \r\n// test disabled\r\n// AB 10 06 00 71 04 01 00 02 04 4A 00 00 00 \r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar idsToUpdate = [];\r\nvar deletedId = [];\r\nvar notSend = false;\r\n// WiFi\r\nvar network = '';\r\nvar pass = '';\r\nvar bodyLength = '00';\r\nvar networkLength = '00';\r\nvar passLength = '00';\r\nvar dataSMS = '';\r\n// configuration command (0X02) WiFi Connect Network\r\nvar value = '02';\r\nvar keyLength = '00';\r\nvar confWifi = '';\r\n//check if a number was deleted, and remove it from the list\r\nlet counter = 0;\r\nfor (var wifiChanged of paramsChanged.WiFiList) {\r\n // update ids\r\n var wifis = paramsChangedIds.WiFiList[counter];\r\n for (var item in wifis) {\r\n idsToUpdate.push(wifis[item]);\r\n }\r\n if (wifiChanged.Deleted === \"true\") {\r\n deletedId.push(wifiChanged);\r\n }\r\n counter++;\r\n}\r\n//iterate over approved wifi networks, \r\ncounter = 0;\r\nfor (var wifi in params.WiFiList) {\r\n confWifi = '8' + ('00' + decimalToHex(parseInt(wifi))).slice(-1).toUpperCase(); // Enable wifi index \r\n if (deletedId.length > 0) {\r\n if (checkValue(wifi) === true) {\r\n confWifi = ('00' + decimalToHex(wifi)).slice(-2).toUpperCase(); // Add wifi index\r\n value += `044A${confWifi}0000`; // No SSID, No password \r\n } else {\r\n if (params.WiFiList[wifi].SSID) {\r\n network = ascii_to_hexa(params.WiFiList[wifi].SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiList[wifi].Password) {\r\n pass = ascii_to_hexa(params.WiFiList[wifi].Password).toUpperCase();\r\n passLength = ('00' + decimalToHex(pass.length / 2)).slice(-2).toUpperCase();\r\n }\r\n keyLength = ('00' + decimalToHex(4 + network.length / 2 + pass.length / 2)).slice(-2).toUpperCase();\r\n // key 4A\r\n value += keyLength + '4A' + confWifi + networkLength + passLength + network + pass;\r\n }\r\n } else {\r\n if (params.WiFiList[wifi].SSID) {\r\n network = ascii_to_hexa(params.WiFiList[wifi].SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiList[wifi].Password) {\r\n pass = ascii_to_hexa(params.WiFiList[wifi].Password).toUpperCase();\r\n passLength = ('00' + decimalToHex(pass.length / 2)).slice(-2).toUpperCase();\r\n }\r\n keyLength = ('00' + decimalToHex(4 + network.length / 2 + pass.length / 2)).slice(-2).toUpperCase();\r\n // key 4A\r\n value += keyLength + '4A' + confWifi + networkLength + passLength + network + pass;\r\n }\r\n counter++;\r\n}\r\n//disable other wifi networks\r\n// 02 04 4A 02 00 00\r\nfor (counter; counter < 5; counter++) {\r\n confWifi = ('00' + decimalToHex(counter)).slice(-2).toUpperCase(); // Add wifi index\r\n value += `044A${confWifi}0000`; // No SSID, No password \r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(value.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(value);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + value;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n idsToUpdate: idsToUpdate,\r\n notSend: notSend\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 checkValue(contact) {\r\n for (var d in deletedId) {\r\n if (params.WiFiList[contact].SSID == paramsChanged.WiFiList[d].SSID) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5346,"Name":"setWifiSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local WIFI Settings':\r\n//var params = {WiFiConnect:{'EnableDisableWiFiConnect':'false','SSID':'wifi_name','Password':'wifi_password'}}\r\n// Test enabled\r\n// AB 10 1C 00 98 78 00 00 02 1A 4A 80 09 0D 77 69 66 69 5F 6E 61 6D 65 77 69 66 69 5F 70 61 73 73 77 6F 72 64 \r\n// test disabled\r\n// AB 10 06 00 71 04 01 00 02 04 4A 00 00 00 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) WiFi Connect Network\r\nvar messageBody = '02';\r\n// WiFi\r\nvar network = '';\r\nvar pass = '';\r\nvar bodyLength = '00';\r\nvar networkLength = '00';\r\nvar passLength = '00';\r\nvar dataSMS = '';\r\nif (params.WiFiSettings.EnableDisableWiFiSettings == 'true') {\r\n if (params.WiFiSettings.SSID) {\r\n network = ascii_to_hexa(params.WiFiSettings.SSID).toUpperCase();\r\n networkLength = ('00' + decimalToHex(network.length / 2)).slice(-2).toUpperCase();\r\n }\r\n if (params.WiFiSettings.Password) {\r\n pass = ascii_to_hexa(params.WiFiSettings.Password).toUpperCase();\r\n passLength = ('00' + decimalToHex(pass.length / 2)).slice(-2).toUpperCase();\r\n }\r\n bodyLength = ('00' + decimalToHex(4 + network.length / 2 + pass.length / 2)).slice(-2).toUpperCase();\r\n // key 4A and enable, not connected and index 0 = 80\r\n messageBody += bodyLength + \"4A80\" + networkLength + passLength + network + pass;\r\n} else {\r\n messageBody += '044A000000';\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5015,"Name":"getSystemSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '33'; //System settings - allow list\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data); // For GPRS command\r\nAddValue('sequenceNumber', sequenceID);\r\n//AddValueSMS('dataSMS', dataSMS); // For SMS command\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":5014,"Name":"getVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar value = '34'; //10 Ring tone Volume\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":24,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5013,"Name":"setSystemSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = '00000000000000000100'; // A1 phone monitor Enable as default documentation\r\nif (params.SystemSettings.AllowList == 'true') { // Enable SMS Whitelist Setting\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\n//if (params.PhoneSettings.SilentCallMode == 'true') {\r\n// value += '1';\r\n//} else {\r\nvalue += '0';\r\n//}\r\n//if (params.PhoneSettings.ButtonHangUp == 'true') {\r\n// value += '1';\r\n//} else {\r\nvalue += '1'; // ButtonHangUp Default True\r\n//}\r\nif (params.SystemSettings.AllowList == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.SystemSettings.AutoAnswer == 'true') {\r\n value += '1';\r\n // if (params.PhoneSettings.AutoAnswerAfterRings) {\r\n // value += ('0000000' + decimalToBinary(parseInt(params.PhoneSettings.AutoAnswerAfterRings))).slice(-7);\r\n // } else {\r\n value += ('0000011'); // default 3\r\n // }\r\n} else {\r\n value += '00000000';\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '33';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('')\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF)\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('')\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":3,"SendAttempts":3,"ProtocolActionObjects":[],"Tags":[]},{"Id":5010,"Name":"getCustomId","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '47'; //Get device or custom id \r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":8,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5008,"Name":"getNoMotionAlert","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '53'; //No motion Alert code\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":7,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5007,"Name":"getFallDownAlert","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '56'; //Fall down Alert code\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":8,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":5005,"Name":"getPerformanceMode","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar value = '44'; //time interval\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\n/* IMEI:863921033969786\r\nGSM signal quality: 15\r\nSoftware version: V07BX.8601.2109\r\nversion: V1.0.29.1 */\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//var prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":23,"SendAttempts":7,"ProtocolActionObjects":[],"Tags":[]},{"Id":5004,"Name":"getSystemLanguage","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '1F'; //System language - locale\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data); // For GPRS command\r\nAddValue('sequenceNumber', sequenceID);\r\n//AddValueSMS('dataSMS', dataSMS); // For SMS command\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":22,"SendAttempts":3,"ProtocolActionObjects":[],"Tags":[]},{"Id":5003,"Name":"getHomeBeacon","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = ''; //get home beacon\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '09';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\n/* IMEI:863921033969786\r\nGSM signal quality: 15\r\nSoftware version: V07BX.8601.2109\r\nversion: V1.0.29.1 */\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":3,"ProtocolActionObjects":[],"Tags":[]},{"Id":5002,"Name":"getAuthorisedNumbers","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = ''; //get top 10 authorised numbers\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '09';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\n/* IMEI:863921033969786\r\nGSM signal quality: 15\r\nSoftware version: V07BX.8601.2109\r\nversion: V1.0.29.1 */\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0B00' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":3,"ProtocolActionObjects":[],"Tags":[]},{"Id":4918,"Name":"actionConfigurationMode","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nif (params.Controls.ConfigurationMode == 'true') {\r\n var data = `GPRSHB1M`;\r\n} else {\r\n var data = `GPRSHB0M`; //`GPRSHB240S`;\r\n}\r\nAddValue('data', data);\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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4918,\"Name\":\"actionConfigurationMode\",\"TemplateSMS\":null,\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nif (params.Controls.ConfigurationMode == 'true') {\\r\\n var data = `GPRSHB1M`;\\r\\n} else {\\r\\n var data = `GPRSHB240S`; //`GPRSHB0M`;\\r\\n}\\r\\nAddValue('data', data);\\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}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734458640}],"Tags":[]},{"Id":4980,"Name":"setServerSMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n var domain = serverString[0];\r\n var port = serverString[1];\r\n dataSMS = `IP1,${domain},${port}`;\r\n //if (params.SMSPassword.SMSPasswordOld) {\r\n // var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\r\n //} else {\r\n // var data = `IP1,${domain},${port}`;\r\n //}\r\n}\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4976,"Name":"setEmergencyNumberbySMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.EmergencySettings.EmergencyNumber) {\r\n var phone_number = params.EmergencySettings.EmergencyNumber;\r\n dataSMS = `A1,0,1,${phone_number}`;\r\n //if (params.SMSPassword.SMSPasswordOld) {\r\n // var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\r\n //} else {\r\n // var data = `IP1,${domain},${port}`;\r\n //}\r\n}\r\n// Reply from device \"Set contact number 1 ok.\"\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4975,"Name":"setFallSensitivitybySMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.EmergencySettings.FallSensitivity) {\r\n var sensitivity = parseInt(params.EmergencySettings.FallSensitivity);\r\n dataSMS = `FL1,${sensitivity},1`;\r\n}\r\n// Reply from device \"Set fall down alarm ok!\"\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4940,"Name":"setBeacons","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local Beacon':\r\n//AB10C800F6640902021F73805F03002160C000000000000000004556303642617365436861726765721E73817016BAE84BF50000000000000000456E74726164614F666963696E6110730200000000000000000000000000001073030000000000000000000000000000107304000000000000000000000000000010730500000000000000000000000000001073060000000000000000000000000000107307000000000000000000000000000010730800000000000000000000000000001073090000000000000000000000000000//var params = {'HomeBeacon': [{'Beacon':'EV06 Base Charger,1C0:60:21:00:03:5F','Name':'Beacon1'},{'Beacon':'EntradaOficina,F5:4B:E8:BA:16:70','Name':'Beacon2'} ]};\r\n//var params = {'HomeBeacon': {'BeaconName': [{'Number':'1','Name':'Contact1'},{'Number':'2','Name':'Contact2'} ]}};\r\nvar configs = [];\r\nvar idsToUpdate = [];\r\nvar deletedId = []\r\nvar counter = 0;\r\nvar notSend = false;\r\nvar numberLength = '00';\r\nvar numberHex = ''; // MAC\r\nvar nameLength = '00';\r\nvar nameHex = ''; // Description\r\nvar value = '02';\r\nvar keyLength = '00';\r\nvar confTel = ''; // for index and enable//disable\r\nvar beaconString = '';\r\nvar beacon_name = '';\r\nvar beacon_mac = '';\r\nfor (var contactChanged of paramsChanged.BeaconList) {\r\n var contacts = paramsChangedIds.BeaconList[counter]; //counter\r\n for (var item in contacts) {\r\n idsToUpdate.push(contacts[item]);\r\n }\r\n if (contactChanged.Deleted === \"true\") {\r\n deletedId.push(contactChanged);\r\n // confTel = ('00' + decimalToHex(contactChanged)).slice(-2).toUpperCase(); // Add beacon number\r\n // value += \"1073\" + confTel + '0000000000000000000000000000'; //no name, mac nor lat//long\r\n }\r\n //counter++;\r\n}\r\n//var index = params.BeaconList.length;\r\nfor (var contact in params.BeaconList) {\r\n //console.log(parseInt(contact)+1);\r\n confTel = '8' + ('00' + decimalToHex(parseInt(contact))).slice(-1).toUpperCase(); // Add contact for the index\r\n if (deletedId.length > 0) {\r\n if (checkValue(contact) === true) {\r\n confTel = ('00' + decimalToHex(contact)).slice(-2).toUpperCase(); // Add beacon number\r\n value += \"1073\" + confTel + '0000000000000000000000000000'; //no name, mac nor lat//long\r\n } else {\r\n if (params.BeaconList[contact].Beacon !== null) {\r\n // name, mac, major, minor\r\n beaconString = params.BeaconList[contact].Beacon.split(',');\r\n beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, '')).toUpperCase();\r\n beacon_mac = beaconString[1].replace(/:/g, '');\r\n beacon_mac = changeEndianness(beacon_mac);\r\n } else {\r\n beaconString = 'empty,00:00:00:00:00:00';\r\n beaconString = beaconString.split(',');\r\n beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, '')).toUpperCase();\r\n beacon_mac = beaconString[1].replace(/:/g, '');\r\n }\r\n //let beacon_major = beaconString[2];\r\n //let beacon_minor = beaconString[3];\r\n //numberHex = ascii_to_hexa(params.HomeBeacon[contact].Beacon).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(params.HomeBeacon[contact].Beacon.length)).slice(-2).toUpperCase();\r\n //nameHex = ascii_to_hexa(params.HomeBeacon[contact].Name).toUpperCase();\r\n //nameLength = ('00' + decimalToHex(params.HomeBeacon[contact].Name.length)).slice(-2).toUpperCase();\r\n //keyLength = ('00' + decimalToHex(5 + params.HomeBeacon[contact].Beacon.length + params.HomeBeacon[contact].Name.length)).slice(-2).toUpperCase();\r\n keyLength = ('00' + decimalToHex(16 + (beacon_name.length / 2))).slice(-2).toUpperCase();\r\n value += keyLength + \"73\" + confTel + beacon_mac + '0000000000000000' + beacon_name; //no lat long\r\n }\r\n } else {\r\n if (params.BeaconList[contact].Beacon !== null) {\r\n // name, mac, major, minor\r\n beaconString = params.BeaconList[contact].Beacon.split(',');\r\n beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, '')).toUpperCase();\r\n beacon_mac = beaconString[1].replace(/:/g, '');\r\n beacon_mac = changeEndianness(beacon_mac);\r\n } else {\r\n beaconString = 'empty,00:00:00:00:00:00';\r\n beaconString = beaconString.split(',');\r\n beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, '')).toUpperCase();\r\n beacon_mac = beaconString[1].replace(/:/g, '');\r\n }\r\n //let beacon_major = beaconString[2];\r\n //let beacon_minor = beaconString[3];\r\n //numberHex = ascii_to_hexa(params.HomeBeacon[contact].Beacon).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(params.HomeBeacon[contact].Beacon.length)).slice(-2).toUpperCase();\r\n //nameHex = ascii_to_hexa(params.HomeBeacon[contact].Name).toUpperCase();\r\n //nameLength = ('00' + decimalToHex(params.HomeBeacon[contact].Name.length)).slice(-2).toUpperCase();\r\n //keyLength = ('00' + decimalToHex(5 + params.HomeBeacon[contact].Beacon.length + params.HomeBeacon[contact].Name.length)).slice(-2).toUpperCase();\r\n keyLength = ('00' + decimalToHex(16 + (beacon_name.length / 2))).slice(-2).toUpperCase();\r\n value += keyLength + \"73\" + confTel + beacon_mac + '0000000000000000' + beacon_name; //no lat long\r\n //index = index - 1;\r\n }\r\n counter++;\r\n}\r\n//disable other beacons\r\n// 10 73 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00\r\nfor (counter; counter < 10; counter++) {\r\n confTel = ('00' + decimalToHex(counter)).slice(-2).toUpperCase(); // Add beacon number\r\n value += \"1073\" + confTel + '0000000000000000000000000000'; //no name, mac nor lat//long\r\n}\r\n//for (var contactChanged of paramsChanged.BeaconList) {\r\n// var contacts = paramsChangedIds.BeaconList[counter];\r\n// for (var item in contacts) {\r\n// idsToUpdate.push(contacts[item]);\r\n// }\r\n//if (contactChanged.Deleted === \"true\") {\r\n// var cadena = contactChanged.Name + \":\" + contactChanged.Number + ',';\r\n// command = command.replace(cadena, '');\r\n//}\r\n// counter++;\r\n//}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(value.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(value);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + value;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n idsToUpdate: idsToUpdate,\r\n notSend: notSend\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 checkValue(contact) {\r\n for (var d in deletedId) {\r\n if (params.BeaconList[contact].Beacon == paramsChanged.BeaconList[d].Beacon) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4978,"Name":"setAPNSMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n var apn = apnString[0];\r\n var apn_username = apnString[1];\r\n var apn_password = apnString[2];\r\n dataSMS = `S1,${apn},${apn_username},${apn_password}`;\r\n //if (params.SMSPassword.SMSPasswordOld) {\r\n // data = `${params.SMSPassword.SMSPasswordOld}S1,${apn},${apn_username},${apn_password}`;\r\n //} else {\r\n // data = `S1,${apn},${apn_username},${apn_password}`;\r\n //}\r\n}\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4968,"Name":"getCurrentSettings2","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'status'; // Check fall sens (function settings)\r\n/* Mode:4,0 second\r\nLED: on\r\nBeep: on\r\nVibration: on\r\nTime zone: +10:00\r\nGEO Fence:0,0,0,0\r\nMotion alarm: off\r\nNo Motion alarm: off\r\nTilt alert: off\r\nFall alarm: on, level:5\r\nLow power alarm: on,15%\r\nSOS Call:10 minutes, loop:1 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"HasAck":true,"HexString":true,"Order":18,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4968,\"Name\":\"getCurrentSettings2\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar dataSMS = 'status'; // Check fall sens (function settings)\\r\\n/* Mode:4,0 second\\r\\nLED: on\\r\\nBeep: on\\r\\nVibration: on\\r\\nTime zone: +10:00\\r\\nGEO Fence:0,0,0,0\\r\\nMotion alarm: off\\r\\nNo Motion alarm: off\\r\\nTilt alert: off\\r\\nFall alarm: on, level:5\\r\\nLow power alarm: on,15%\\r\\nSOS Call:10 minutes, loop:1 */\\r\\nvar data = ''; // empty\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar notSend = false;\\r\\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\\r\\n notSend = true;\\r\\n}\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS,\\r\\n notSend: notSend\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":{\"Id\":4958,\"Protocol\":{\"Id\":224,\"Code\":\"Access TEC Roam\",\"Version\":\"0.2\",\"FirmwareVersion\":\"V04b.8601.2411.1.0.16.4411.2409.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":false},\"Name\":\"getCurrentSettings\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar value = '214A1A3440414243567356101F4453473330';\\r\\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n//var keyLength = '10'; // previous\\r\\nvar keyLength = '13';\\r\\nvar key = 'F0';\\r\\nvar messageBody = command + keyLength + key + value;\\r\\nvar dataSMS = 'V?'; // Get Firmware\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":17},\"AvoidResending\":false,\"FollowParentSentType\":true,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":18,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733390363}],"Tags":[]},{"Id":4919,"Name":"actionFindDevice","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar key = '13';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\n (no reply)\r\n*/\r\nvar dataSMS = 'findme';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":12,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4984,"Name":"setSMSPrefix","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nif (params.SMSPrefix.SMSPrefix == 'true') { //Enable Prefix for SMS anwers\r\n if (params.SMSPassword.SMSPasswordOld) {\r\n var data = `${params.SMSPassword.SMSPasswordOld}Prefix1,Rio-${serverParams.Imei}-`;\r\n } else {\r\n var data = `Prefix1,Rio-${serverParams.Imei}-`;\r\n }\r\n} else {\r\n var data = `Prefix0,`; //Disable Prefix for SMS anwers\r\n}\r\nAddValue('data', data);\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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4983,"Name":"actionRequestLocation","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nif (params.SMSPassword.SMSPasswordOld) {\n var data = `${params.SMSPassword.SMSPasswordOld}loc`\n} else {\n var data = `loc`\n}\nAddValue('data', data)\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":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4982,"Name":"actionDeviceReboot","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '12';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'reboot';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":13,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4982,\"Name\":\"actionDeviceReboot\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '04';\\r\\nvar keyLength = '01';\\r\\nvar key = '12';\\r\\nvar messageBody = command + keyLength + key;\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum).toUpperCase();\\r\\nchecksum = ('0000' + checksum).slice(-4);\\r\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\r\\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nvar dataSMS = 'reboot';\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":13,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734006832}],"Tags":[]},{"Id":4981,"Name":"actionFactoryReset","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nvar configsSMS = [];\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '04';\nvar keyLength = '01';\nvar key = '11';\nvar messageBody = command + keyLength + key;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\nvar data = prefix + messageBody;\n// For GPRS command\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\n// For SMS command\nvar dataSMS = 'ineedtoresetEV-06A!';\nAddValueSMS('dataSMS', dataSMS);\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS\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) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":15,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4981,\"Name\":\"actionFactoryReset\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n];\\nvar configs = [];\\nvar configsSMS = [];\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '04';\\nvar keyLength = '01';\\nvar key = '11';\\nvar messageBody = command + keyLength + key;\\nvar checksum = byteStringToByteArray(messageBody);\\nchecksum = crc16byte(checksum);\\nchecksum = decimalToHex(checksum).toUpperCase();\\nchecksum = ('0000' + checksum).slice(-4);\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\n// For GPRS command\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\n// For SMS command\\nvar dataSMS = 'ineedtoresetEV-06A!';\\nAddValueSMS('dataSMS', dataSMS);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS\\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) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction ascii_to_hexa(str) {\\n var arr1 = [];\\n for (var n = 0, l = str.length; n < l; n++) {\\n var hex = Number(str.charCodeAt(n)).toString(16);\\n arr1.push(hex);\\n }\\n return arr1.join('');\\n}\\n\\nfunction crc16byte(s) {\\n var crc = 0x0000;\\n var j, i;\\n for (i = 0; i < s.length; i++) {\\n c = s[i];\\n if (c > 255) {\\n throw new RangeError();\\n }\\n j = (c ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[j] ^ (crc << 8);\\n }\\n return ((crc ^ 0) & 0xFFFF);\\n}\\n\\nfunction byteStringToByteArray(str) {\\n var splitStr = []\\n var j = 0\\n for (let i = 0; i < str.length; i += 2) {\\n splitStr[j] = str.substring(i, i + 2)\\n j++\\n }\\n var bytes = []\\n var bytePos = 0\\n for (let i = 0; i < splitStr.length; i++) {\\n var byteStr = splitStr[i]\\n var b = parseInt(byteStr, 16)\\n if (b < 256) {\\n bytes[bytePos] = b\\n bytePos++\\n }\\n }\\n return bytes\\n}\\n\\nfunction decimalToHex(str) {\\n hexString = str.toString(16);\\n return hexString\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":15,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733955479},{"Type":1,"NewValue":"{\"Id\":4981,\"Name\":\"actionFactoryReset\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n];\\nvar configs = [];\\nvar configsSMS = [];\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\nvar command = '04';\\nvar keyLength = '01';\\nvar key = '11';\\nvar messageBody = command + keyLength + key;\\nvar checksum = byteStringToByteArray(messageBody);\\nchecksum = crc16byte(checksum);\\nchecksum = decimalToHex(checksum).toUpperCase();\\nchecksum = ('0000' + checksum).slice(-4);\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\\nvar data = prefix + messageBody;\\n// For GPRS command\\nAddValue('data', data);\\nAddValue('sequenceNumber', sequenceID);\\n// For SMS command\\nvar dataSMS = 'ineedtoresetEV04!';\\nAddValueSMS('dataSMS', dataSMS);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS\\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) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction ascii_to_hexa(str) {\\n var arr1 = [];\\n for (var n = 0, l = str.length; n < l; n++) {\\n var hex = Number(str.charCodeAt(n)).toString(16);\\n arr1.push(hex);\\n }\\n return arr1.join('');\\n}\\n\\nfunction crc16byte(s) {\\n var crc = 0x0000;\\n var j, i;\\n for (i = 0; i < s.length; i++) {\\n c = s[i];\\n if (c > 255) {\\n throw new RangeError();\\n }\\n j = (c ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[j] ^ (crc << 8);\\n }\\n return ((crc ^ 0) & 0xFFFF);\\n}\\n\\nfunction byteStringToByteArray(str) {\\n var splitStr = []\\n var j = 0\\n for (let i = 0; i < str.length; i += 2) {\\n splitStr[j] = str.substring(i, i + 2)\\n j++\\n }\\n var bytes = []\\n var bytePos = 0\\n for (let i = 0; i < splitStr.length; i++) {\\n var byteStr = splitStr[i]\\n var b = parseInt(byteStr, 16)\\n if (b < 256) {\\n bytes[bytePos] = b\\n bytePos++\\n }\\n }\\n return bytes\\n}\\n\\nfunction decimalToHex(str) {\\n hexString = str.toString(16);\\n return hexString\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":15,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734595853}],"Tags":[]},{"Id":4979,"Name":"setGatewayNumberbySMS","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = [];\r\nvar data = '';\r\nvar dataSMS = '';\r\nvar notSend = false;\r\nif (params.CommunicationSettings.SMSGateway) {\r\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\r\n var gateway_name = gatewayString[1];\r\n var gateway_number = gatewayString[0];\r\n dataSMS = `A10,1,0,${gateway_number}`;\r\n //if (params.SMSPassword.SMSPasswordOld) {\r\n // var data = `${params.SMSPassword.SMSPasswordOld}IP1,${domain},${port}`;\r\n //} else {\r\n // var data = `IP1,${domain},${port}`;\r\n //}\r\n}\r\n// Reply from device \"Set contact number 10 ok.\"\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\nAddValue('data', data);\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\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) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4977,"Name":"setPerformanceMode","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//Añadir comando para poner modo6 ??\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar command = '02';\r\nvar keyLength = '0D';\r\nvar key = '44'; // Time interval command\r\nvar cycleInterval = 60;\r\nvar lazyCycleInterval = 60;\r\nvar heartBeatStatus = '00000000'; //heartbeat OFF and heartBeat = 0; heartbeat ON and heartBeat = 240 F0000080; \r\nvar selectedMode = '2'; // Balanced mode\r\nif (params.PerformanceSettings.Mode) {\r\n selectedMode = params.PerformanceSettings.Mode;\r\n}\r\nvar value = '000000'; // Time interval to zero\r\nswitch (selectedMode) {\r\n case '0': // No reporting\r\n cycleInterval = 86400; // Time interval to 24 hrs \r\n lazyCycleInterval = 86400; // Lazy Time interval to 24 hrs \r\n // HB = 0\r\n break;\r\n case '1': //Power Saving\r\n cycleInterval = 28800; // Time interval to 8 hrs \r\n lazyCycleInterval = 43200; // Lazy Time interval to 12 hrs \r\n // HB = 0\r\n break;\r\n case '2': //Balanced\r\n cycleInterval = 600; // Time interval to 10 min \r\n lazyCycleInterval = 3600; // Lazy Time interval to 1 hrs \r\n heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240\r\n break;\r\n case '3': //High Freq\r\n cycleInterval = 240; // Time interval to 4 min \r\n lazyCycleInterval = 3600; // Lazy Time interval to 1 hrs\r\n heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240 \r\n break;\r\n default:\r\n var value = '000000'; // Time interval to zero\r\n //var valueSMS = '';\r\n}\r\n//Sms Value\r\nvar valueSMS = ',' + cycleInterval + 'S,' + lazyCycleInterval + 'S';\r\nvar value = parseInt(cycleInterval);\r\nif (params.Controls.ConfigurationMode == 'true') {\r\n heartBeatStatus = '3C000080'; //heartbeat ON and heartBeat = 60;\r\n} // else {\r\n// var heartBeatStatus = '00000000'; //heartbeat OFF and heartBeat = 0; heartbeat ON and heartBeat = 240 F0000080; \r\n//}\r\nvalue = decimalToHex(value);\r\nvalue = ('000000' + value).slice(-6).toUpperCase();\r\nvalue = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\r\nvar valueLazy = parseInt(lazyCycleInterval);\r\nvar valueLazy = decimalToHex(valueLazy);\r\nvalueLazy = ('000000' + valueLazy).slice(-6).toUpperCase();\r\nvalueLazy = valueLazy.substring(4, 6) + valueLazy.substring(2, 4) + valueLazy.substring(0, 2);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar messageBody = command + keyLength + key + heartBeatStatus + value + '00' + valueLazy + '00';\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\n//How to calculate sequenceID\r\nvar prefix = 'AB10' + '0F00' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'mode6' + valueSMS;\r\nAddValueSMS('dataSMS', dataSMS);\r\n//debug(data);\r\n//debug(dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4977,\"Name\":\"setPerformanceMode\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\n//Añadir comando para poner modo6 ??\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar command = '02';\\r\\nvar keyLength = '0D';\\r\\nvar key = '44'; // Time interval command\\r\\nvar cycleInterval = 60;\\r\\nvar lazyCycleInterval = 60;\\r\\nvar heartBeatStatus = '00000000'; //heartbeat OFF and heartBeat = 0; heartbeat ON and heartBeat = 240 F0000080; \\r\\nvar selectedMode = '2'; // Balanced mode\\r\\nif (params.PerformanceSettings.Mode) {\\r\\n selectedMode = params.PerformanceSettings.Mode;\\r\\n}\\r\\nvar value = '000000'; // Time interval to zero\\r\\nswitch (selectedMode) {\\r\\n case '0': // No reporting\\r\\n cycleInterval = 86400; // Time interval to 24 hrs \\r\\n lazyCycleInterval = 86400; // Lazy Time interval to 24 hrs \\r\\n // HB = 0\\r\\n break;\\r\\n case '1': //Power Saving\\r\\n cycleInterval = 28800; // Time interval to 8 hrs \\r\\n lazyCycleInterval = 43200; // Lazy Time interval to 12 hrs \\r\\n // HB = 0\\r\\n break;\\r\\n case '2': //Balanced\\r\\n cycleInterval = 600; // Time interval to 10 min \\r\\n lazyCycleInterval = 3600; // Lazy Time interval to 1 hrs \\r\\n //heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240\\r\\n break;\\r\\n case '3': //High Freq\\r\\n cycleInterval = 240; // Time interval to 4 min \\r\\n lazyCycleInterval = 3600; // Lazy Time interval to 1 hrs\\r\\n //heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240 \\r\\n break;\\r\\n default:\\r\\n var value = '000000'; // Time interval to zero\\r\\n //var valueSMS = '';\\r\\n}\\r\\n//Sms Value\\r\\nvar valueSMS = ',' + cycleInterval + 'S,' + lazyCycleInterval + 'S';\\r\\nvar value = parseInt(cycleInterval);\\r\\nif (params.Controls.ConfigurationMode == 'true') {\\r\\n heartBeatStatus = '3C000080'; //heartbeat ON and heartBeat = 60;\\r\\n} else {\\r\\n heartBeatStatus = 'F0000080'; //heartbeat ON and heartBeat = 240; \\r\\n}\\r\\nvalue = decimalToHex(value);\\r\\nvalue = ('000000' + value).slice(-6).toUpperCase();\\r\\nvalue = value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\\r\\nvar valueLazy = parseInt(lazyCycleInterval);\\r\\nvar valueLazy = decimalToHex(valueLazy);\\r\\nvalueLazy = ('000000' + valueLazy).slice(-6).toUpperCase();\\r\\nvalueLazy = valueLazy.substring(4, 6) + valueLazy.substring(2, 4) + valueLazy.substring(0, 2);\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar messageBody = command + keyLength + key + heartBeatStatus + value + '00' + valueLazy + '00';\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\r\\n//How to calculate sequenceID\\r\\nvar prefix = 'AB10' + '0F00' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nvar dataSMS = 'mode6' + valueSMS;\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\n//debug(data);\\r\\n//debug(dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734459146}],"Tags":[]},{"Id":4974,"Name":"setRingToneVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nif (params.SystemSettings.Volume) {\n var volume = parseInt(params.SystemSettings.Volume);\n volume = decimalToHex(parseInt(volume));\n volume = ('00' + volume).slice(-2);\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '02';\nvar key = '10';\nvar messageBody = command + keyLength + key + volume;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID // change to AB10 from AB18\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\n//var commandConfigs = {\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4973,"Name":"setSpeakerVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.SystemSettings.Volume) {\n var volume = parseInt(params.SystemSettings.Volume)\n volume = decimalToHex(volume)\n volume = ('00' + volume).slice(-2).toUpperCase()\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '02'\nvar key = '12'\nvar messageBody = command + keyLength + key + volume\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum).toUpperCase()\nchecksum = ('0000' + checksum).slice(-4)\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4972,"Name":"setAlarmClock1","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.AlarmClock1.EnableDisableAlarmClock1 == 'true') {\n var index = '80';\n if (params.AlarmClock1.Time) {\n var hour = params.AlarmClock1.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2)\n hour = parseInt(hour)\n hour = decimalToHex(hour)\n hour = ('00' + hour).slice(-2).toUpperCase()\n var min = params.AlarmClock1.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4)\n min = parseInt(min)\n min = decimalToHex(min)\n min = ('00' + min).slice(-2).toUpperCase()\n } else {\n var hour = '0C'; // default time 12:00\n var min = '00';\n }\n //create the bit table to use with workdays\n var workday = 0\n if (params.AlarmClock1.Monday == 'true') {\n workday += 1\n }\n if (params.AlarmClock1.Tuesday == 'true') {\n workday += 2\n }\n if (params.AlarmClock1.Wednesday == 'true') {\n workday += 4\n }\n if (params.AlarmClock1.Thursday == 'true') {\n workday += 8\n }\n if (params.AlarmClock1.Friday == 'true') {\n workday += 16\n }\n if (params.AlarmClock1.Saturday == 'true') {\n workday += 32\n }\n if (params.AlarmClock1.Sunday == 'true') {\n workday += 64\n }\n workday = decimalToHex(workday).toUpperCase()\n workday = ('00' + workday).slice(-2).toUpperCase()\n if (params.AlarmClock1.Duration) {\n var duration = params.AlarmClock1.Duration\n duration = decimalToHex(parseInt(duration)).toUpperCase()\n duration = ('00' + duration).slice(-2).toUpperCase()\n } else {\n var duration = '1E';\n }\n var ring = '01'\n var value = index + hour + min + workday + duration + ring\n} else {\n value = '000000000101'\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '07'\nvar key = '0B'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar prefix = 'AB10' + '0900' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4971,"Name":"actionPowerOff","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '14';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'off';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":14,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4971,\"Name\":\"actionPowerOff\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '04';\\r\\nvar keyLength = '01';\\r\\nvar key = '14';\\r\\nvar messageBody = command + keyLength + key;\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum).toUpperCase();\\r\\nchecksum = ('0000' + checksum).slice(-4);\\r\\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\\r\\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nvar dataSMS = 'off';\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":14,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733955031}],"Tags":[]},{"Id":4970,"Name":"setNoDisturb","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nif (params.DoNotDisturb.EnableDisableNoDisturb == 'true') {\n var flag = '80';\n if (params.DoNotDisturb.Start) {\n var hourStart = params.DoNotDisturb.Start.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2);\n hourStart = parseInt(hourStart);\n hourStart = decimalToHex(hourStart);\n hourStart = ('00' + hourStart).slice(-2).toUpperCase();\n var minStart = params.DoNotDisturb.Start.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4);\n minStart = parseInt(minStart);\n minStart = decimalToHex(minStart);\n minStart = ('00' + minStart).slice(-2).toUpperCase();\n }\n if (params.DoNotDisturb.End) {\n var hourEnd = params.DoNotDisturb.End.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2);\n hourEnd = parseInt(hourEnd);\n hourEnd = decimalToHex(hourEnd);\n hourEnd = ('00' + hourEnd).slice(-2).toUpperCase();\n var minEnd = params.DoNotDisturb.End.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4);\n minEnd = parseInt(minEnd);\n minEnd = decimalToHex(minEnd);\n minEnd = ('00' + minEnd).slice(-2).toUpperCase();\n }\n} else {\n var flag = '00';\n var hourStart, hourEnd, minStart, minEnd;\n hourStart = hourEnd = minStart = minEnd = '00';\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '06';\nvar key = '0C';\nvar messageBody = command + keyLength + key + flag + hourStart + minStart + hourEnd + minEnd;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0800' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4969,"Name":"actionDeleteRecords","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '04';\r\nvar keyLength = '01';\r\nvar key = '10';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + '0300' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'flush';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":9,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4967,"Name":"getAPN","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar value = '40'; //Ask for APN\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4966,"Name":"getServer","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar value = '43'; //Ask for Server\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4965,"Name":"actionTrace","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '01';\r\nvar key = '13';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\nSet live tracking every 10 seconds and last for 10 minutes ok.\r\n*/\r\nvar dataSMS = 'CL10s,600s'; // CL(interval),(duration)\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":3,"HasAck":true,"HexString":true,"Order":11,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4964,"Name":"actionRealTimeLocation","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '01';\r\nvar key = '12';\r\nvar totalLenght = '0300';\r\nvar keyLength = '01';\r\nvar messageBody = command + keyLength + key;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\n/* Answer from the device\r\nGPS Loc!\r\nNow:\r\nLoc Time:07/04/2021 17:36:44\r\nSpeed:0km/h\r\nAltitude:97.0\r\nBattery:57%\r\nwww.google.com/maps?q=22.6537233,114.0006070\r\n*/\r\nvar dataSMS = 'loc';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":10,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4964,\"Name\":\"actionRealTimeLocation\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '01';\\r\\nvar key = '12';\\r\\nvar totalLenght = '0300';\\r\\nvar keyLength = '01';\\r\\nvar messageBody = command + keyLength + key;\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\n/* Answer from the device\\r\\nGPS Loc!\\r\\nNow:\\r\\nLoc Time:07/04/2021 17:36:44\\r\\nSpeed:0km/h\\r\\nAltitude:97.0\\r\\nBattery:57%\\r\\nwww.google.com/maps?q=22.6537233,114.0006070\\r\\n*/\\r\\nvar dataSMS = 'loc';\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":10,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733954911}],"Tags":[]},{"Id":4963,"Name":"setAPN","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local APN':\r\n//var params = {CommunicationSettings:{'SMSGateway':'+34666777888,Esendex','APN':'','APNOld':'','Server':'52.174.17.77,5678','ServerOld':''}}\r\n// AB101B 0066840300 021043802E1635322E3137342E31372E373704406D326D01410142\r\n// AB1015 00 66 84 F5 4B 02 10 43 80 2E 16 35 32 2E 31 37 34 2E 31 37 2E 37 37 04 40 6D 32 6D 01 41 01 42 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) APN and Server and Gateway Number\r\nvar messageBody = '02';\r\n// Server\r\nvar domain = '';\r\nvar port = '';\r\nvar serverLength = '00';\r\n// APN\r\nvar apn = '';\r\nvar apn_password = '';\r\nvar apn_username = '';\r\nvar apnLength = '00';\r\nvar apnUserLength = '00';\r\nvar apnPassLength = '00';\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n domain = serverString[0];\r\n port = serverString[1];\r\n port = changeEndianness(decimalToHex(parseInt(port))).toUpperCase();\r\n // Server IP and Port\r\n domain = ascii_to_hexa(domain).toUpperCase();\r\n serverLength = ('00' + decimalToHex(2 + port.length / 2 + domain.length / 2)).slice(-2).toUpperCase();\r\n // key 43 and TCP and GPRS is 80\r\n messageBody += serverLength + \"4380\" + port + domain;\r\n}\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n // APN\r\n apn = apnString[0];\r\n apn = ascii_to_hexa(apn).toUpperCase();\r\n apnLength = ('00' + decimalToHex(1 + apn.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnLength + \"40\" + apn;\r\n // APN username\r\n apn_username = apnString[1];\r\n apn_username = ascii_to_hexa(apn_username).toUpperCase();\r\n apnUserLength = ('00' + decimalToHex(1 + apn_username.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnUserLength + \"41\" + apn_username;\r\n // APN passwprd\r\n apn_password = apnString[2];\r\n apn_password = ascii_to_hexa(apn_password).toUpperCase();\r\n apnPassLength = ('00' + decimalToHex(1 + apn_password.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnPassLength + \"42\" + apn_password;\r\n // For SMS\r\n dataSMS = `S1,${apnString[0]},${apnString[1]},${apnString[2]}`;\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":true,"Order":0,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4962,"Name":"setEmergencySettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar messageBody = '02';\r\nvar key = '30';\r\nvar phone_number = '00000000000';\r\nvar numberHex = '';\r\nvar sosKeyLength = '00';\r\n//var confFall = '1100'; // Enable, Dial\r\nvar confSOS = '10100000'; // Enable, no SMS, Toggle Call, No Sim Dialing, Contact Number 1\r\nvar dataSMS = '';\r\nif (params.AlertSettings.EmergencyNumber) {\r\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\r\n phone_number = params.AlertSettings.EmergencyNumber;\r\n numberHex = ascii_to_hexa(phone_number).toUpperCase();\r\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n messageBody += sosKeyLength + key + confSOS + numberHex;\r\n dataSMS = `A1,0,1,${phone_number}`;\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLength = changeEndianness(totalLength);\r\n//totalLength = '1000'; //better to calculate it\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":3,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4961,"Name":"setFallSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) Fall sensitivity\r\nvar messageBody = '02';\r\nvar sensitivity = '';\r\nvar dataSMS = '';\r\nvar value = ''\r\nif (params.FallSettings.EnableDisableFallSettings == 'true') {\r\n value += '1'\r\n value += '100' //Dial\r\n //}\r\n if (params.FallSettings.Sensitivity) {\r\n var sensiString = params.FallSettings.Sensitivity.split(',');\r\n var level = sensiString[1];\r\n sensitivity = parseInt(sensiString[0]);\r\n // For SMS\r\n dataSMS = `FL1,${sensitivity},1`;\r\n //numberHex = ascii_to_hexa(sensitivity).toUpperCase();\r\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\r\n value += sensitivity\r\n }\r\n} else {\r\n value = '00000000'\r\n dataSMS = `FL0,1,1`;\r\n}\r\n// create HEADER\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\r\nvar command = '02'\r\nvar keyLength = '02'\r\nvar key = '56'\r\nvar messageBody = command + keyLength + key + value\r\nvar checksum = byteStringToByteArray(messageBody)\r\nchecksum = crc16byte(checksum)\r\nchecksum = decimalToHex(checksum)\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\r\nchecksum = changeEndianness(checksum)\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\r\nvar data = prefix + messageBody\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":4,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4960,"Name":"setGateway","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar messageBody = '02';\r\nvar key = '30';\r\nvar phone_number = '00000000000';\r\nvar numberHex = '';\r\nvar sosKeyLength = '00';\r\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.SMSGateway) {\r\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\r\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\r\n var gateway = gatewayString[1];\r\n gateway_number = gatewayString[0];\r\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\r\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\n messageBody += sosKeyLength + key + confSOS + numberHex;\r\n dataSMS = `A10,1,0,${phone_number}`;\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLength = changeEndianness(totalLength);\r\n//totalLength = '1000'; //better to calculate it\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":2,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4960,\"Name\":\"setGateway\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar messageBody = '02';\\r\\nvar key = '30';\\r\\nvar phone_number = '00000000000';\\r\\nvar numberHex = '';\\r\\nvar sosKeyLength = '00';\\r\\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\\r\\nvar dataSMS = '';\\r\\nif (params.CommunicationSettings.SMSGateway) {\\r\\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\\r\\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\\r\\n var gateway = gatewayString[1];\\r\\n gateway_number = gatewayString[0];\\r\\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\\r\\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\\r\\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n messageBody += sosKeyLength + key + confSOS + numberHex;\\r\\n dataSMS = `A10,1,0,${phone_number}`;\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLength = changeEndianness(totalLength);\\r\\n//totalLength = '1000'; //better to calculate it\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733955599},{"Type":1,"NewValue":"{\"Id\":4960,\"Name\":\"setGateway\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar messageBody = '02';\\r\\nvar key = '30';\\r\\nvar gateway_number = '00000000000';\\r\\nvar numberHex = '';\\r\\nvar sosKeyLength = '00';\\r\\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\\r\\nvar dataSMS = '';\\r\\nif (params.CommunicationSettings.SMSGateway) {\\r\\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\\r\\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\\r\\n var gateway = gatewayString[1];\\r\\n gateway_number = gatewayString[0];\\r\\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\\r\\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\\r\\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n messageBody += sosKeyLength + key + confSOS + numberHex;\\r\\n dataSMS = `A10,1,0,${gateway_number}`;\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLength = changeEndianness(totalLength);\\r\\n//totalLength = '1000'; //better to calculate it\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734622575},{"Type":1,"NewValue":"{\"Id\":4960,\"Name\":\"setGateway\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\nvar messageBody = '02';\\r\\nvar key = '30';\\r\\nvar gateway_number = '00000000000';\\r\\nvar numberHex = '';\\r\\nvar sosKeyLength = '00';\\r\\nvar confSOS = '10001001'; // Enable + doesn't accept SMS+ Untogle Call, No SIM Dialing + Contact Number 10\\r\\nvar dataSMS = '';\\r\\nif (params.CommunicationSettings.SMSGateway) {\\r\\n confSOS = ('00' + binaryToHex(confSOS)).slice(-2).toUpperCase();\\r\\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\\r\\n var gateway = gatewayString[1];\\r\\n gateway_number = gatewayString[0];\\r\\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\\r\\n //numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\\r\\n sosKeyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\\r\\n messageBody += sosKeyLength + key + confSOS + numberHex;\\r\\n dataSMS = `A10,0,0,${gateway_number}`; // doesn't accept SMS+ Untogle Call\\r\\n}\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar totalLength = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\\r\\ntotalLength = changeEndianness(totalLength);\\r\\n//totalLength = '1000'; //better to calculate it\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\\r\\nvar data = prefix + messageBody;\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":true,\"Order\":2,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1734632777}],"Tags":[]},{"Id":4959,"Name":"setServer","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local APN':\r\n//var params = {CommunicationSettings:{'SMSGateway':'+34666777888,Esendex','APN':'','APNOld':'','Server':'52.174.17.77,5678','ServerOld':''}}\r\n// AB101B 0066840300 021043802E1635322E3137342E31372E373704406D326D01410142\r\n// AB1015 00 66 84 F5 4B 02 10 43 80 2E 16 35 32 2E 31 37 34 2E 31 37 2E 37 37 04 40 6D 32 6D 01 41 01 42 \r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// configuration command (0X02) APN and Server and Gateway Number\r\nvar messageBody = '02';\r\n// Server\r\nvar domain = '';\r\nvar port = '';\r\nvar serverLength = '00';\r\n// APN\r\nvar apn = '';\r\nvar apn_password = '';\r\nvar apn_username = '';\r\nvar apnLength = '00';\r\nvar apnUserLength = '00';\r\nvar apnPassLength = '00';\r\nvar dataSMS = '';\r\nif (params.CommunicationSettings.Server) {\r\n var serverString = params.CommunicationSettings.Server.split(',');\r\n domain = serverString[0];\r\n port = serverString[1];\r\n port = changeEndianness(decimalToHex(parseInt(port))).toUpperCase();\r\n // Server IP and Port\r\n domain = ascii_to_hexa(domain).toUpperCase();\r\n serverLength = ('00' + decimalToHex(2 + port.length / 2 + domain.length / 2)).slice(-2).toUpperCase();\r\n // key 43 and TCP and GPRS is 80\r\n messageBody += serverLength + \"4380\" + port + domain;\r\n // For SMS\r\n dataSMS = `IP1,${serverString[0]},${serverString[1]}`;\r\n}\r\nif (params.CommunicationSettings.APN) {\r\n var apnString = params.CommunicationSettings.APN.split(',');\r\n // APN\r\n apn = apnString[0];\r\n apn = ascii_to_hexa(apn).toUpperCase();\r\n apnLength = ('00' + decimalToHex(1 + apn.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnLength + \"40\" + apn;\r\n // APN username\r\n apn_username = apnString[1];\r\n apn_username = ascii_to_hexa(apn_username).toUpperCase();\r\n apnUserLength = ('00' + decimalToHex(1 + apn_username.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnUserLength + \"41\" + apn_username;\r\n // APN passwprd\r\n apn_password = apnString[2];\r\n apn_password = ascii_to_hexa(apn_password).toUpperCase();\r\n apnPassLength = ('00' + decimalToHex(1 + apn_password.length / 2)).slice(-2).toUpperCase();\r\n messageBody += apnPassLength + \"42\" + apn_password;\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(messageBody.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":true,"Order":1,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4958,"Name":"getCurrentSettings","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar value = '214A1A3440414243567356101F4453473330';\r\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\n//var keyLength = '10'; // previous\r\nvar keyLength = '13';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar dataSMS = 'V?'; // Get Firmware\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":17,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4957,"Name":"getFirmwareVersion","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar value = '1A'; //Ask for firmware Long\r\nvar command = '02';\r\nvar keyLength = '02';\r\nvar key = 'F0';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nvar dataSMS = 'V?';\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":16,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4956,"Name":"getCurrentSettings3","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'BCQ1'; // Check Beacon List\r\n/* 1,F7:37:B7:10:81:CE,office1\r\n2,C4:9F:A6:15:24:3F,office2\r\n3,D3:E3:AC:86:5E:46,office7 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"HasAck":true,"HexString":true,"Order":19,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4956,\"Name\":\"getCurrentSettings3\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar dataSMS = 'BCQ1'; // Check Beacon List\\r\\n/* 1,F7:37:B7:10:81:CE,office1\\r\\n2,C4:9F:A6:15:24:3F,office2\\r\\n3,D3:E3:AC:86:5E:46,office7 */\\r\\nvar data = ''; // empty\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar notSend = false;\\r\\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\\r\\n notSend = true;\\r\\n}\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS,\\r\\n notSend: notSend\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":{\"Id\":4958,\"Protocol\":{\"Id\":224,\"Code\":\"Access TEC Roam\",\"Version\":\"0.2\",\"FirmwareVersion\":\"V04b.8601.2411.1.0.16.4411.2409.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"getCurrentSettings\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar value = '214A1A3440414243567356101F4453473330';\\r\\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n//var keyLength = '10'; // previous\\r\\nvar keyLength = '13';\\r\\nvar key = 'F0';\\r\\nvar messageBody = command + keyLength + key + value;\\r\\nvar dataSMS = 'V?'; // Get Firmware\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":17},\"AvoidResending\":false,\"FollowParentSentType\":true,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":19,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733390414}],"Tags":[]},{"Id":4955,"Name":"getCurrentSettings4","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'A?'; // Check Contact List\r\n/* A1: 1,1,15899795842\r\nA2: 1,0,13632770106\r\nA3: 0,1,15986236978 */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"HasAck":true,"HexString":true,"Order":20,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4955,\"Name\":\"getCurrentSettings4\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar dataSMS = 'A?'; // Check Contact List\\r\\n/* A1: 1,1,15899795842\\r\\nA2: 1,0,13632770106\\r\\nA3: 0,1,15986236978 */\\r\\nvar data = ''; // empty\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar notSend = false;\\r\\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\\r\\n notSend = true;\\r\\n}\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS,\\r\\n notSend: notSend\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":{\"Id\":4958,\"Protocol\":{\"Id\":224,\"Code\":\"Access TEC Roam\",\"Version\":\"0.2\",\"FirmwareVersion\":\"V04b.8601.2411.1.0.16.4411.2409.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"getCurrentSettings\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar value = '214A1A3440414243567356101F4453473330';\\r\\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n//var keyLength = '10'; // previous\\r\\nvar keyLength = '13';\\r\\nvar key = 'F0';\\r\\nvar messageBody = command + keyLength + key + value;\\r\\nvar dataSMS = 'V?'; // Get Firmware\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":17},\"AvoidResending\":false,\"FollowParentSentType\":true,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":20,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733390446}],"Tags":[]},{"Id":4954,"Name":"getCurrentSettings5","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\n// Contacts, APN, server details, fall sensitivity and Beacon List\r\nvar dataSMS = 'GPRS?'; // Check Server Details\r\n/*GRPS: ON\r\nAPN: internet\r\nUsername:\r\nPassword:\r\nIP: 1, www.smart-locator.com\r\nPort: 6060\r\nMove report time: 30 minutes\r\nNo move report time: 60 minutes\r\nHB: on, 20 minutes */\r\nvar data = ''; // empty\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar notSend = false;\r\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\r\n notSend = true;\r\n}\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS,\r\n notSend: notSend\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n// functions\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":true,"SendingType":0,"HasAck":true,"HexString":true,"Order":21,"SendAttempts":4,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4954,\"Name\":\"getCurrentSettings5\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n// Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar dataSMS = 'GPRS?'; // Check Server Details\\r\\n/*GRPS: ON\\r\\nAPN: internet\\r\\nUsername:\\r\\nPassword:\\r\\nIP: 1, www.smart-locator.com\\r\\nPort: 6060\\r\\nMove report time: 30 minutes\\r\\nNo move report time: 60 minutes\\r\\nHB: on, 20 minutes */\\r\\nvar data = ''; // empty\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar notSend = false;\\r\\nif (isForcedBySMS == 'False' && ((serverParams.CommandType == 'ByGPRS') || (serverParams.CommandType == 'Default' && ((serverParams.ParentCommandType == 'ByGPRS') || (serverParams.ParentCommandType == 'Default' && serverParams.ConfigType == 'GPRS') || (serverParams.ParentCommandType === null && serverParams.ConfigType == 'GPRS'))))) {\\r\\n notSend = true;\\r\\n}\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS,\\r\\n notSend: notSend\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":{\"Id\":4958,\"Protocol\":{\"Id\":224,\"Code\":\"Access TEC Roam\",\"Version\":\"0.2\",\"FirmwareVersion\":\"V04b.8601.2411.1.0.16.4411.2409.25\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"getCurrentSettings\",\"TemplateSMS\":\"<>\",\"Template\":\"<>\",\"AckTemplate\":null,\"Operation\":\"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\\r\\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\\r\\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\\r\\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\\r\\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\\r\\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\\r\\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\\r\\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\\r\\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\\r\\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\\r\\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\\r\\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\\r\\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\\r\\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\\r\\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\\r\\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\\r\\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\\r\\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\\r\\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\\r\\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\\r\\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\\r\\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\\r\\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\\r\\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\\r\\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\\r\\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\\r\\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\\r\\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\\r\\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\\r\\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\\r\\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\\r\\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\\r\\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n];\\r\\nvar msg = [];\\r\\nvar configs = [];\\r\\nvar configsSMS = [];\\r\\n//var value = '0234404142435673'; //Firmware, Contacts, APN, server details, fall sensitivity and Beacon List\\r\\nvar value = '214A1A3440414243567356101F4453473330';\\r\\n//SpeedDial, Wifi Network, Firmware Long, Contacts, APNusername, APNpass, server details, fall sensitivity and Beacon List, Fall down alert, Ring tome vol,System language, time interval, No motion alert,custom id, allow list, Emergency numbers\\r\\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\\r\\nvar command = '02';\\r\\n//var keyLength = '10'; // previous\\r\\nvar keyLength = '13';\\r\\nvar key = 'F0';\\r\\nvar messageBody = command + keyLength + key + value;\\r\\nvar dataSMS = 'V?'; // Get Firmware\\r\\nvar checksum = byteStringToByteArray(messageBody);\\r\\nchecksum = crc16byte(checksum);\\r\\nchecksum = decimalToHex(checksum);\\r\\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\nchecksum = changeEndianness(checksum);\\r\\nvar prefix = 'AB10' + '1500' + checksum + sequenceID; // add 2 to keylenght\\r\\nvar data = prefix + messageBody;\\r\\n// For GPRS command\\r\\nAddValue('data', data);\\r\\nAddValue('sequenceNumber', sequenceID);\\r\\n// For SMS command\\r\\nAddValueSMS('dataSMS', dataSMS);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n// functions\\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) {\\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 ascii_to_hexa(str) {\\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n}\\r\\n\\r\\nfunction crc16byte(s) {\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n}\\r\\n\\r\\nfunction byteStringToByteArray(str) {\\r\\n var splitStr = []\\r\\n var j = 0\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2)\\r\\n j++\\r\\n }\\r\\n var bytes = []\\r\\n var bytePos = 0\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i]\\r\\n var b = parseInt(byteStr, 16)\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b\\r\\n bytePos++\\r\\n }\\r\\n }\\r\\n return bytes\\r\\n}\\r\\n\\r\\nfunction decimalToHex(str) {\\r\\n hexString = str.toString(16);\\r\\n return hexString\\r\\n}\\r\\n\\r\\nfunction decimalToBinary(x) {\\r\\n let bin = 0;\\r\\n let rem, i = 1,\\r\\n step = 1;\\r\\n while (x != 0) {\\r\\n rem = x % 2;\\r\\n x = parseInt(x / 2);\\r\\n bin = bin + rem * i;\\r\\n i = i * 10;\\r\\n }\\r\\n return bin\\r\\n}\\r\\n\\r\\nfunction binaryToHex(x) {\\r\\n var hexa = parseInt(x, 2).toString(16);\\r\\n return hexa\\r\\n}\\r\\n\\r\\nfunction changeEndianness(string) {\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":true,\"SendAttempts\":4,\"Order\":17},\"AvoidResending\":false,\"FollowParentSentType\":true,\"SendingType\":0,\"HasAck\":true,\"HexString\":true,\"Order\":21,\"SendAttempts\":4,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1733390475}],"Tags":[]},{"Id":4953,"Name":"setMotionAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.MovementAlert.EnableDisableMotionAlert == 'true') {\n value += '1';\n if (params.MovementAlert.Dial == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n if (params.MovementAlert.Time) {\n var time = ('00000000000000' + decimalToBinary(parseInt(params.MovementAlert.Time))).slice(-14);\n value += time;\n }\n if (params.MovementAlert.Cooldown) {\n var time = ('0000000000000000' + decimalToBinary(parseInt(params.MovementAlert.Cooldown))).slice(-16);\n value += time;\n //console.log(value);\n }\n} else {\n value = '0';\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\nvalue = changeEndianness(value);\n//value = value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '52';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = changeEndianness(checksum);\n//checksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x !== 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin;\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa;\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4952,"Name":"setSpeedDialSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.SpeedDial.EnableDisableSpeedDial == 'true') {\n value += '10'; //Enable\n value += '0'; //Long Press\n /*if (params.SpeedDialButtonSettings.TriggerMode == '0') {\n value += '0';\n } else {\n value += '1';\n }*/\n value += '0010'; //Auth2 number\n var time = 20;\n value += ('0000000' + decimalToBinary(parseInt(time))).slice(-7);\n value += '11'; //feedback vibrate and voice\n /*if (params.SpeedDialButtonSettings.Feedback) {\n value += params.SpeedDialButtonSettings.Feedback;\n } else {\n value += '00';\n }*/\n} else {\n value = '0000000000000000';\n}\nvalue = ('0000' + binaryToHex(value)).slice(-4).toUpperCase();\nvalue = value.substring(2, 4) + value.substring(0, 2);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '03';\nvar key = '21';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0500' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4951,"Name":"setSystemLanguage","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\n//create the bit table to use with control\r\nvar value = '';\r\nif (params.SystemSettings.SystemLanguage) {\r\n var language = params.SystemSettings.SystemLanguage;\r\n var languageHex = ascii_to_hexa(language).toUpperCase();\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = ('0' + decimalToHex(1 + (languageHex.length / 2))).slice(-2).toUpperCase();\r\nvar key = '1F'; //system language\r\nvar messageBody = command + keyLength + key + languageHex;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar totalLength = '0500';\r\nif (languageHex.length == 10) {\r\n totalLength = '0800';\r\n}\r\nif (languageHex.length == 12) {\r\n totalLength = '0900';\r\n}\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin;\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa;\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4950,"Name":"setNoMotionAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.NonMovementSettings.EnableDisableNonMovementSettings == 'true') {\n value += '1';\n //if (params.NonMovementAlert.Dial == 'true') {\n // value += '1'\n //} else {\n value += '1'; // Dial by default\n //}\n if (params.NonMovementSettings.Time) {\n var time = ('000000000000000000000000000000' + decimalToBinary(params.NonMovementSettings.Time)).slice(-30);\n //var time = ('000000000000000000000000000000' + decimalToBinary(121)).slice(-30)\n value += time;\n }\n} else {\n value = '0';\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase()\nvalue = value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2)\n//value = '2C010080'\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '05'\nvar key = '53'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4949,"Name":"setOverSpeedAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = ''\nif (params.OverSpeedAlert.EnableDisableOverSpeedAlert == 'true') {\n value += '1'\n if (params.OverSpeedAlert.Speed) {\n var angle = ('000000000000000' + decimalToBinary(parseInt(params.OverSpeedAlert.Speed))).slice(-15)\n value += angle\n }\n} else {\n value = '0'\n}\nvalue = ('0000' + binaryToHex(value)).slice(-4).toUpperCase()\nvalue = changeEndianness(value)\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '03'\nvar key = '54'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = changeEndianness(checksum.toString())\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0500' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4948,"Name":"setHomeBeacon","TemplateSMS":"<>","Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n// BeaconName\r\nvar msg = [];\r\nvar configs = [];\r\nvar configsSMS = [];\r\nvar dataSMS = '';\r\n//create the bit table to use with control\r\nvar value = '';\r\nvar beacon_name = '';\r\nvar beacon_mac = '000000000000'; //default\r\n// always enable\r\nvalue += '1'; //Enable\r\nvalue += '0000000'; // Beacon 1\r\n/*if (params.SetBeacon1.EnableDisableBeacon1 == 'true') {\r\n value += '1'; //Enable\r\n value += '0000000'; // Beacon 1\r\n //Beacon 1\r\n} else {\r\n value = '00000000';\r\n}*/\r\n// name, mac, major, minor\r\nif (params.HomeBeacon.BeaconName) {\r\n beaconString = params.HomeBeacon.BeaconName.split(',');\r\n var beacon_name = ascii_to_hexa(beaconString[0].replace(/\\s+/g, ''));\r\n var beacon_mac = beaconString[1].replace(/:/g, '');\r\n beacon_mac = changeEndianness(beacon_mac);\r\n var beacon_major = beaconString[2];\r\n var beacon_minor = beaconString[3];\r\n dataSMS = `BSC0.0,0.0,${beaconString[1]},${beaconString[0].replace(/\\s+/g, '')}`;\r\n}\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = ('00' + decimalToHex(16 + (beacon_name.length / 2))).slice(-2).toUpperCase();\r\nvar key = '73';\r\nvar suffix = '0000000000000000'; // lat and long. not needed\r\nvar messageBody = command + keyLength + key + value + beacon_mac + suffix + beacon_name;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar totalLenght = ('0000' + decimalToHex(18 + (beacon_name.length / 2))).slice(-4).toUpperCase();\r\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\n// For GPRS command\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\n// For SMS command\r\nAddValueSMS('dataSMS', dataSMS);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS\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) {\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin;\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa;\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":7,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4947,"Name":"setSMSGatewayNumber","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar numberHex = '';\r\nvar numberLength = '00';\r\nvar gateway_number = '00000000000';\r\nvar nameHex = ascii_to_hexa('No Esendex').toUpperCase();\r\nvar value = '';\r\nif (params.CommunicationSettings.SMSGateway) {\r\n value += '110'; // Enable + accept SMS+ Untogle Call\r\n //Authorised number 10\r\n value += '01001'; // No SIM Dialing + Contact Number 10\r\n var gatewayString = params.CommunicationSettings.SMSGateway.split(',');\r\n var gateway = gatewayString[1];\r\n gateway_number = gatewayString[0];\r\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\r\n numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\r\n nameHex = ascii_to_hexa(gateway).toUpperCase();\r\n} else {\r\n value += '000'; // Disable + not accept SMS +Untogle Call\r\n value += '01001';\r\n numberHex = ascii_to_hexa(gateway_number).toUpperCase();\r\n numberLength = ('00' + decimalToHex(gateway_number.length)).slice(-2).toUpperCase();\r\n}\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar key = '34';\r\nvar keyLength = ('00' + decimalToHex(5 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-2).toUpperCase();\r\nvar nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\nvar messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + '00'; // no photo\r\nvar totalLenght = ('0000' + decimalToHex(7 + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":3,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4946,"Name":"setCustom ID","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar key = '47';\nif (params.CustomID.CustomID == 'true') {\n var keyLength = '02';\n var customID = '06';\n var totalLenght = '0400';\n} else {\n var keyLength = '01';\n var customID = '';\n var totalLenght = '0300';\n}\nvar messageBody = command + keyLength + key + customID;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\nvar data = prefix + messageBody;\n// For GPRS command\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":5,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4945,"Name":"setHeartRateDetectingInterval","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nif (params.HeartRateMonitor.HeartRateDetectingInterval) {\n var heartBeat = parseInt(params.HeartRateMonitor.HeartRateDetectingInterval) * 60;\n heartBeat = decimalToHex(heartBeat);\n heartBeat = ('000000' + heartBeat).slice(-6).toUpperCase();\n if (params.HeartRateMonitor.EnableDisableHeartRateMonitor == 'true') {\n heartBeat = '80' + heartBeat;\n } //enable\n else {\n heartBeat = '00' + heartBeat;\n } //disable\n heartBeat = heartBeat.substring(6, 8) + heartBeat.substring(4, 6) + heartBeat.substring(2, 4) + heartBeat.substring(0, 2);\n} else {\n var heartBeat = '58 02 00 00'\n} // disable and 600 seconds\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '46';\nvar totalLenght = '0700';\nvar messageBody = command + keyLength + key + heartBeat;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4944,"Name":"setVoicePrompt","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\n//create the bit table to use with control\r\nvar value = '';\r\nif (params.VoicePrompt.Beep == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.TiltCancel == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Charging == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Battery == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call1 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call2 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call3 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call4 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call5 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Fall == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.SOS == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Click == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.NoMotion == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Motion == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Tilt == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Activity == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Find == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call6 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.AlarmCancel == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Time == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nvalue += '0'; // not defined bit 20\r\nif (params.VoicePrompt.CallError == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.CallDisconnected == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.CallHang == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call7 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call8 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call9 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.Call10 == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.AlarmComplete == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.BLE == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.VoicePrompt.BaseLocation == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nvalue += '0'; // not defined bit 31\r\nvalue = reverseString(value);\r\n\r\nfunction reverseString(str) {\r\n var newString = \"\";\r\n for (var i = str.length - 1; i >= 0; i--) {\r\n newString += str[i];\r\n }\r\n return newString;\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '19';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4943,"Name":"setCycle","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.CycleInterval.HeartbeatInterval) {\n var heartBeat = parseInt(params.CycleInterval.HeartbeatInterval) * 60;\n heartBeat = decimalToHex(heartBeat);\n heartBeat = ('000000' + heartBeat).slice(-6).toUpperCase();\n heartBeat = '80' + heartBeat;\n heartBeat = heartBeat.substring(6, 8) + heartBeat.substring(4, 6) + heartBeat.substring(2, 4) + heartBeat.substring(0, 2);\n}\nif (params.CycleInterval.CycleInterval) {\n var cycleInterval = parseInt(params.CycleInterval.CycleInterval) * 60;\n cycleInterval = decimalToHex(cycleInterval);\n cycleInterval = ('00000000' + cycleInterval).slice(-8).toUpperCase();\n cycleInterval = cycleInterval.substring(6, 8) + cycleInterval.substring(4, 6) + cycleInterval.substring(2, 4) + cycleInterval.substring(0, 2);\n}\nif (params.CycleInterval.LazyCycleInterval) {\n var lazyCycleInterval = parseInt(params.CycleInterval.LazyCycleInterval) * 60;\n lazyCycleInterval = decimalToHex(lazyCycleInterval);\n lazyCycleInterval = ('00000000' + lazyCycleInterval).slice(-8).toUpperCase();\n lazyCycleInterval = lazyCycleInterval.substring(6, 8) + lazyCycleInterval.substring(4, 6) + lazyCycleInterval.substring(2, 4) + lazyCycleInterval.substring(0, 2);\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '0D';\nvar key = '44';\nvar messageBody = command + keyLength + key + heartBeat + cycleInterval + lazyCycleInterval;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0F00' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4942,"Name":"setAlarmClock2","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.AlarmClock2.EnableDisableAlarmClock2 == 'true') {\n var index = '81'\n if (params.AlarmClock2.Time) {\n var hour = params.AlarmClock2.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2)\n hour = parseInt(hour)\n hour = decimalToHex(hour)\n hour = ('00' + hour).slice(-2).toUpperCase()\n var min = params.AlarmClock2.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4)\n min = parseInt(min)\n min = decimalToHex(min)\n min = ('00' + min).slice(-2).toUpperCase()\n } else {\n var hour = '0C'; // default time 12:00\n var min = '00';\n }\n //create the bit table to use with workdays\n var workday = 0\n if (params.AlarmClock2.Monday == 'true') {\n workday += 1\n }\n if (params.AlarmClock2.Tuesday == 'true') {\n workday += 2\n }\n if (params.AlarmClock2.Wednesday == 'true') {\n workday += 4\n }\n if (params.AlarmClock2.Thursday == 'true') {\n workday += 8\n }\n if (params.AlarmClock2.Friday == 'true') {\n workday += 16\n }\n if (params.AlarmClock2.Saturday == 'true') {\n workday += 32\n }\n if (params.AlarmClock2.Sunday == 'true') {\n workday += 64\n }\n workday = decimalToHex(workday).toUpperCase()\n workday = ('00' + workday).slice(-2).toUpperCase()\n if (params.AlarmClock2.Duration) {\n var duration = params.AlarmClock2.Duration\n duration = decimalToHex(parseInt(duration)).toUpperCase()\n duration = ('00' + duration).slice(-2).toUpperCase()\n } else {\n var duration = '1E';\n }\n var ring = '01'\n var value = index + hour + min + workday + duration + ring\n} else {\n value = '010000000101'\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '07'\nvar key = '0B'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar prefix = 'AB10' + '0900' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4941,"Name":"setVoicePromptVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.SystemSettings.Volume) {\n var volume = parseInt(params.SystemSettings.Volume)\n volume = decimalToHex(volume)\n volume = ('00' + volume).slice(-2).toUpperCase()\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '02'\nvar key = '1C'\nvar messageBody = command + keyLength + key + volume\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum).toUpperCase()\nchecksum = ('0000' + checksum).slice(-4)\nchecksum = changeEndianness(checksum)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4939,"Name":"setEnableControl","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.EnableControl.LED == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.Beep == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.Vibration == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.CellTowerLocating == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.WiFi == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.SOSCallSpeaker == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.SideCallSpeaker == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.BLEStayConnected == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.BLELocating == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.SOSCallVoice == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.BLEAlwaysON == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.GPSLocate == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.AlertTCPFast == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nvalue += '0'; //watch only girar muñeca para iluminar pantalla\nif (params.EnableControl.Beacon == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nvalue += '0'; // activity fuction, \n//step counting, \nif (params.EnableControl.Step == 'true') {\n value += '1';\n} else {\n value += '0';\n}\n//home-wifi location, data-saver, NLprovider, power control,\n// sos cancel switch, Long SMS, plus 7 more without functions\nvalue += '0000';\nif (params.EnableControl.StopCallSequence == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nvalue += '00000000';\nif (params.EnableControl.AutoUpdate == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nif (params.EnableControl.AGPS == 'true') {\n value += '1';\n} else {\n value += '0';\n}\nvalue = reverseString(value);\n\nfunction reverseString(str) {\n var newString = \"\";\n for (var i = str.length - 1; i >= 0; i--) {\n newString += str[i];\n }\n return newString;\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\nvalue = changeEndianness(value);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '0F';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = changeEndianness(checksum);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4938,"Name":"setSOSButtonSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\n value += '10';\n if (params.SOSButtonSettings.TriggerMode == '0') {\n value += '0';\n } else {\n value += '1';\n }\n /*\n if (params.SOSButtonSettings.CallTo == '0'){\n value += '0001'\n }else { \n value += '0000'\n }\n */\n value += '1111'; //SOS task (Default) Standard\n var time = 20;\n value += ('0000000' + decimalToBinary(parseInt(time))).slice(-7);\n if (params.SOSButtonSettings.Feedback) {\n value += params.SOSButtonSettings.Feedback;\n } else {\n value += '00';\n }\n} else {\n value = '0000000000000000';\n}\nvalue = ('0000' + binaryToHex(value)).slice(-4).toUpperCase();\nvalue = value.substring(2, 4) + value.substring(0, 2);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '03';\nvar key = '20';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0500' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x !== 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin;\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4937,"Name":"setExtraEnableControl","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = '';\r\n// Wifi loc name EV07, beacon leaves home alert, beacon V2, BLE scan switch,\r\n// XXX, no motion alert data only EV05, power saving EV06, Stop alert call sequence.\r\nvalue += '0000000';\r\nif (params.EnableControl.StopCallSequence == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nvalue = reverseString(value);\r\n\r\nfunction reverseString(str) {\r\n var newString = \"\";\r\n for (var i = str.length - 1; i >= 0; i--) {\r\n newString += str[i];\r\n }\r\n return newString;\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '75';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\n//How to calculate sequenceID\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4936,"Name":"setAlarmClock4","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.AlarmClock4.EnableDisableAlarmClock4 == 'true') {\n var index = '83'\n if (params.AlarmClock4.Time) {\n var hour = params.AlarmClock4.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2)\n hour = parseInt(hour)\n hour = decimalToHex(hour)\n hour = ('00' + hour).slice(-2).toUpperCase()\n var min = params.AlarmClock4.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4)\n min = parseInt(min)\n min = decimalToHex(min)\n min = ('00' + min).slice(-2).toUpperCase()\n } else {\n var hour = '0C'; // default time 12:00\n var min = '00';\n }\n //create the bit table to use with workdays\n var workday = 0\n if (params.AlarmClock4.Monday == 'true') {\n workday += 1\n }\n if (params.AlarmClock4.Tuesday == 'true') {\n workday += 2\n }\n if (params.AlarmClock4.Wednesday == 'true') {\n workday += 4\n }\n if (params.AlarmClock4.Thursday == 'true') {\n workday += 8\n }\n if (params.AlarmClock4.Friday == 'true') {\n workday += 16\n }\n if (params.AlarmClock4.Saturday == 'true') {\n workday += 32\n }\n if (params.AlarmClock4.Sunday == 'true') {\n workday += 64\n }\n workday = decimalToHex(workday).toUpperCase()\n workday = ('00' + workday).slice(-2).toUpperCase()\n if (params.AlarmClock4.Duration) {\n var duration = params.AlarmClock4.Duration\n duration = decimalToHex(parseInt(duration)).toUpperCase()\n duration = ('00' + duration).slice(-2).toUpperCase()\n } else {\n var duration = '1E';\n }\n var ring = '01'\n var value = index + hour + min + workday + duration + ring\n} else {\n value = '030000000101'\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '07'\nvar key = '0B'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar prefix = 'AB10' + '0900' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4935,"Name":"setOystaNumber","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = ''\nvalue += '1'\nvalue += '010'\n//Authorised number 10\nvalue += '1001'\nvar number = '+447781482635'\nvar numberHex = ascii_to_hexa(number).toUpperCase()\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase()\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase()\nvar key = '30'\nvar messageBody = command + keyLength + key + value + numberHex\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase()\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4934,"Name":"setStepCollectSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar configs = [];\nif (params.StepCounting.StepCountingInterval) {\n var heartBeat = parseInt(params.StepCounting.StepCountingInterval) * 60;\n heartBeat = decimalToHex(heartBeat);\n heartBeat = ('000000' + heartBeat).slice(-6).toUpperCase();\n if (params.StepCounting.EnableDisableStepCounting == 'true') {\n heartBeat = '80' + heartBeat;\n } //enable\n else {\n heartBeat = '00' + heartBeat;\n } //disable\n heartBeat = heartBeat.substring(6, 8) + heartBeat.substring(4, 6) + heartBeat.substring(2, 4) + heartBeat.substring(0, 2);\n} else {\n var heartBeat = '58 02 00 00';\n} // disable and 600 seconds\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '5B';\nvar totalLength = '0700';\nvar messageBody = command + keyLength + key + heartBeat;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar prefix = 'AB10' + totalLength + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4933,"Name":"setSMSPassword","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar password = '00000000';\r\nif (params.SMSPassword.EnableDisableSMSPassword == 'true') {\r\n if (params.SMSPassword.SMSPassword) {\r\n password = parseInt(params.SMSPassword.SMSPassword);\r\n password = decimalToHex(password);\r\n password = ('000000' + password).slice(-6).toUpperCase();\r\n password = changeEndianness(password) + '80';\r\n }\r\n}\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '0D';\r\nvar messageBody = command + keyLength + key + password;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum).toUpperCase();\r\nchecksum = ('0000' + checksum).slice(-4);\r\nchecksum = changeEndianness(checksum);\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4932,"Name":"setFallDownAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = ''\r\nif (params.FallSettings.EnableDisableFallSettings == 'true') {\r\n value += '1'\r\n //if (params.FallAlarm.Dial == 'true') {\r\n // value += '100'\r\n //} else {\r\n value += '000'\r\n //}\r\n if (params.FallSettings.Sensitivity) {\r\n var sensitivity = parseInt(params.FallSettings.Sensitivity)\r\n sensitivity = ('0000' + decimalToBinary(sensitivity)).slice(-4).toUpperCase()\r\n value += sensitivity\r\n }\r\n} else {\r\n value = '00000000'\r\n}\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\r\nvar command = '02'\r\nvar keyLength = '02'\r\nvar key = '56'\r\nvar messageBody = command + keyLength + key + value\r\nvar checksum = byteStringToByteArray(messageBody)\r\nchecksum = crc16byte(checksum)\r\nchecksum = decimalToHex(checksum)\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\r\nchecksum = changeEndianness(checksum)\r\n//Hpw to calculate sequenceID\r\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\r\nvar data = prefix + messageBody\r\n//var data = 'AB100400 7CEE0200020256C1';\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4931,"Name":"setSOSOption","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar talkTime = 65534\ntalkTime = decimalToHex(talkTime)\ntalkTime = ('0000' + talkTime).slice(-4).toUpperCase()\ntalkTime = changeEndianness(talkTime)\nif (params.SOSButtonSettings.RingTime) {\n var ringTime = params.SOSButtonSettings.RingTime\n ringTime = parseInt(ringTime)\n ringTime = decimalToHex(ringTime)\n ringTime = ('00' + ringTime).slice(-2).toUpperCase()\n} else {\n var ringTime = 20;\n ringTime = decimalToHex(ringTime);\n ringTime = ('00' + ringTime).slice(-2).toUpperCase();\n}\nif (params.SOSButtonSettings.Retries) {\n var tries = params.SOSButtonSettings.Retries\n tries = parseInt(tries)\n tries = decimalToHex(tries)\n tries = ('00' + tries).slice(-2).toUpperCase()\n} else {\n var tries = '01';\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '05'\nvar key = '32'\nvar messageBody = command + keyLength + key + talkTime + ringTime + tries\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum).toUpperCase()\nchecksum = ('0000' + checksum).slice(-4)\nchecksum = changeEndianness(checksum)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4930,"Name":"setAlarmClock3","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.AlarmClock3.EnableDisableAlarmClock3 == 'true') {\n var index = '82'\n if (params.AlarmClock3.Time) {\n var hour = params.AlarmClock3.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(0, 2)\n hour = parseInt(hour)\n hour = decimalToHex(hour)\n hour = ('00' + hour).slice(-2).toUpperCase()\n var min = params.AlarmClock3.Time.replace(/[^a-zA-Z0-9]/g, \"\").substring(2, 4)\n min = parseInt(min)\n min = decimalToHex(min)\n min = ('00' + min).slice(-2).toUpperCase()\n } else {\n var hour = '0C'; // default time 12:00\n var min = '00';\n }\n //create the bit table to use with workdays\n var workday = 0\n if (params.AlarmClock3.Monday == 'true') {\n workday += 1\n }\n if (params.AlarmClock3.Tuesday == 'true') {\n workday += 2\n }\n if (params.AlarmClock3.Wednesday == 'true') {\n workday += 4\n }\n if (params.AlarmClock3.Thursday == 'true') {\n workday += 8\n }\n if (params.AlarmClock3.Friday == 'true') {\n workday += 16\n }\n if (params.AlarmClock3.Saturday == 'true') {\n workday += 32\n }\n if (params.AlarmClock3.Sunday == 'true') {\n workday += 64\n }\n workday = decimalToHex(workday).toUpperCase()\n workday = ('00' + workday).slice(-2).toUpperCase()\n if (params.AlarmClock3.Duration) {\n var duration = params.AlarmClock3.Duration\n duration = decimalToHex(parseInt(duration)).toUpperCase()\n duration = ('00' + duration).slice(-2).toUpperCase()\n } else {\n var duration = '1E';\n }\n var ring = '01'\n var value = index + hour + min + workday + duration + ring\n} else {\n value = '020000000101'\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '07'\nvar key = '0B'\nvar messageBody = command + keyLength + key + value\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum)\nchecksum = ('0000' + checksum).slice(-4).toUpperCase()\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\nvar prefix = 'AB10' + '0900' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4929,"Name":"setSpeedDialNumber","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar numberHex = '';\r\nvar value = '';\r\n// For Roam\r\nif (params.SpeedDial.EnableDisableSpeedDial == 'true') {\r\n value += '10'; // Enable + Not accept SMS\r\n} else {\r\n value += '00'; // Disable + not accept SMS\r\n}\r\nvalue += '0'; // Untogle Call\r\nif (params.SpeedDial.SpeedDialNumber) {\r\n value += '00001'; // No SIM Dialing + Contact Number 2\r\n // es posible que tengamos que definir un valor por defecto para el numero\r\n var number = params.SpeedDial.SpeedDialNumber;\r\n numberHex = ascii_to_hexa(number).toUpperCase();\r\n} else {\r\n value += '00001';\r\n}\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = ('00' + decimalToHex(2 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\nvar key = '30';\r\nvar messageBody = command + keyLength + key + value + numberHex;\r\nvar totalLenght = ('0000' + decimalToHex(4 + (numberHex.length / 2))).slice(-4).toUpperCase();\r\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction fillHex(x, y) {\r\n if (x % 2 == 0) {\r\n return y\r\n } else {\r\n return y + '00'\r\n }\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4928,"Name":"setPowerAlert","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = '';\nif (params.PowerAlert.EnableDisablePowerAlert == 'true') {\n if (params.PowerAlert.PowerOff == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n if (params.PowerAlert.PowerOn == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n if (params.PowerAlert.PowerLow == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n value += '0';\n value += '000000000000';\n value += '00000000';\n if (params.PowerAlert.LowPowerThreshold) {\n var threshold = ('00000000' + decimalToBinary(params.PowerAlert.LowPowerThreshold)).slice(-8);\n value += threshold;\n } else {\n value += '00001111';\n }\n} else {\n value = '00000000000000000000000000000000';\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\nvalue = value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4) + value.substring(0, 2);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '50';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x !== 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin;\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4927,"Name":"setSOSNumber","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\nvar configs = [];\r\nvar numberHex = '';\r\nvar numberLength = '00';\r\nvar phone_number = '00000000000';\r\nvar nameHex = ascii_to_hexa('SOS').toUpperCase();\r\nvar urlHex = ascii_to_hexa('https://test.myoysta.com/pearl_button_Non_Vector.jpeg').toUpperCase();\r\nvar urlLength = '35';\r\nvar value = '';\r\n// For Rio\r\nif (params.SOSButtonSettings.EnableDisableSOSButtonSettings == 'true') {\r\n value += '10'; // Enable + Not accept SMS\r\n} else {\r\n value += '00';\r\n} // Disable + not accept SMS\r\nif (params.SOSButtonSettings.Call == 'true') {\r\n value += '1'; // Togle Call\r\n} else {\r\n value += '0';\r\n} // Untogle Call\r\nif (params.SOSButtonSettings.Number) {\r\n value += '00000'; // No SIM Dialing + Contact Number 1\r\n phone_number = params.SOSButtonSettings.Number;\r\n numberHex = ascii_to_hexa(phone_number).toUpperCase();\r\n numberLength = ('00' + decimalToHex(phone_number.length)).slice(-2).toUpperCase();\r\n} else {\r\n value += '00000';\r\n numberHex = ascii_to_hexa(phone_number).toUpperCase();\r\n numberLength = ('00' + decimalToHex(phone_number.length)).slice(-2).toUpperCase();\r\n}\r\n// photo URL\r\nvalue = ('00' + binaryToHex(value)).slice(-2).toUpperCase();\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar key = '34';\r\nvar keyLength = ('00' + decimalToHex(8 + (numberHex.length / 2))).slice(-2).toUpperCase();\r\nvar nameLenght = ('00' + decimalToHex((nameHex.length / 2))).slice(-2).toUpperCase();\r\nvar messageBody = command + keyLength + key + value + numberLength + numberHex + nameLenght + nameHex + urlLength + urlHex; // no photo\r\nvar totalLenght = ('0000' + decimalToHex(7 + (urlHex.length / 2) + (numberHex.length / 2) + (nameHex.length / 2))).slice(-4).toUpperCase();\r\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin;\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa;\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":6,"ProtocolActionObjects":[],"Tags":[]},{"Id":4926,"Name":"actionInitializeMileage","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nvar value = '00000000';\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '09';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\nvar totalLenght = '0007';\ntotalLenght = totalLenght.substring(2, 4) + totalLenght.substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\nvar data = prefix + messageBody;\n//var data = 'AB1007009E8B' + sequenceID + '02050900000000'\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}\n/*var configs = [];\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar data = 'AB1007009E8B' + sequenceID + '02050900000000'\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}*/","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4925,"Name":"setContinuousLocate","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.ContinuousLocate.Interval) {\n var Interval = parseInt(params.ContinuousLocate.Interval) * 60;\n Interval = decimalToHex(Interval);\n Interval = ('0000' + Interval).slice(-4).toUpperCase();\n Interval = Interval.substring(2, 4) + Interval.substring(0, 2);\n}\nif (params.ContinuousLocate.Duration) {\n var Duration = parseInt(params.ContinuousLocate.Duration) * 60;\n Duration = decimalToHex(Duration);\n Duration = ('0000' + Duration).slice(-4).toUpperCase();\n Duration = Duration.substring(2, 4) + Duration.substring(0, 2);\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '45';\nvar messageBody = command + keyLength + key + Interval + Duration;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum).toUpperCase();\nchecksum = ('0000' + checksum).slice(-4);\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = [];\n var j = 0;\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2);\n j++;\n }\n var bytes = [];\n var bytePos = 0;\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i];\n var b = parseInt(byteStr, 16);\n if (b < 256) {\n bytes[bytePos] = b;\n bytePos++;\n }\n }\n return bytes;\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString;\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4924,"Name":"setAuthorisedNumbers","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"//updated v 2\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//para pruebas en local Contact':\r\n//AB104F008CF27D3D020E34A0013108436F6E7461637431000E34A1013208436F6E746163743200053402000000053403000000053404000000053405000000053406000000053407000000053408000000053409000000\r\n//var params = {'ApprovedContacts': {'Contact': [{'Number':'1','Name':'Contact1'},{'Number':'2','Name':'Contact2'} ]}};\r\nvar configs = [];\r\nvar idsToUpdate = []\r\nvar deletedId = []\r\nvar notSend = false;\r\nvar numberLength = '00';\r\nvar numberHex = '';\r\nvar nameLength = '00';\r\nvar blankName = '';\r\nvar value = '02';\r\nvar keyLength = '00';\r\nvar confTel = '';\r\nvar count = 2; // approved contact will be from A3 to A9 - index 2 to index 8\r\n//check if a number was deleted, and remove it from the list\r\nlet counter = 0;\r\nfor (var contactChanged of paramsChanged.ApprovedContacts) {\r\n // update ids\r\n var contacts = paramsChangedIds.ApprovedContacts[counter];\r\n for (var item in contacts) {\r\n idsToUpdate.push(contacts[item]);\r\n }\r\n if (contactChanged.Deleted === \"true\") {\r\n //var cvpair1 = {code: p1,value: p2};\r\n deletedId.push(contactChanged);\r\n }\r\n counter++;\r\n}\r\n//iterate over approved contacts, \r\nfor (var contact in params.ApprovedContacts) {\r\n confTel = (binaryToHex(1000)).slice(-1).toUpperCase(); // Enable + Not accept SMS + No Accept Call + No SIM Dialing\r\n if (deletedId.length > 0) {\r\n if (checkValue(contact) === true) {\r\n confTel = ('00' + decimalToHex(count)).slice(-2).toUpperCase(); // Add contact\r\n value += \"0530\" + confTel + '000000'; //no number, no name, no photo\r\n } else {\r\n confTel = confTel + ('00' + decimalToHex(parseInt(count))).slice(-1).toUpperCase(); // Add contact from count to avoid rewrite SOS number and Dial number\r\n numberHex = ascii_to_hexa(params.ApprovedContacts[contact].Contact).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(params.ApprovedContacts[contact].Contact.length)).slice(-2).toUpperCase();\r\n keyLength = ('00' + decimalToHex(2 + params.ApprovedContacts[contact].Contact.length)).slice(-2).toUpperCase();\r\n //value += keyLength + \"30\" + confTel + numberLength + numberHex; //no photo\r\n value += keyLength + \"30\" + confTel + numberHex; //no photo \r\n }\r\n } else {\r\n confTel = confTel + ('00' + decimalToHex(parseInt(count))).slice(-1).toUpperCase(); // Add contact from count to avoid rewrite SOS number and Dial number\r\n numberHex = ascii_to_hexa(params.ApprovedContacts[contact].Contact).toUpperCase();\r\n //numberLength = ('00' + decimalToHex(params.ApprovedContacts[contact].Contact.length)).slice(-2).toUpperCase();\r\n keyLength = ('00' + decimalToHex(2 + params.ApprovedContacts[contact].Contact.length)).slice(-2).toUpperCase();\r\n //value += keyLength + \"30\" + confTel + numberLength + numberHex; //no photo\r\n value += keyLength + \"30\" + confTel + numberHex; //no photo\r\n }\r\n count++;\r\n}\r\n//and disable other contacts\r\nfor (var i = count; i < 9; i++) {\r\n confTel = ('00' + decimalToHex(parseInt(i))).slice(-2).toUpperCase(); // Add contact\r\n value += \"0530\" + confTel + '000000'; //no number, no name, no photo\r\n}\r\n// create HEADER\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar totalLenght = ('0000' + decimalToHex(value.length / 2)).slice(-4).toUpperCase();\r\ntotalLenght = changeEndianness(totalLenght);\r\nvar checksum = byteStringToByteArray(value);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + value;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n idsToUpdate: idsToUpdate,\r\n notSend: notSend\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 checkValue(contact) {\r\n for (var d in deletedId) {\r\n //if (d === contact) {\r\n // return true;\r\n //}\r\n if (params.ApprovedContacts[contact].Contact == paramsChanged.ApprovedContacts[d].Contact) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = []\r\n var j = 0\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2)\r\n j++\r\n }\r\n var bytes = []\r\n var bytePos = 0\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i]\r\n var b = parseInt(byteStr, 16)\r\n if (b < 256) {\r\n bytes[bytePos] = b\r\n bytePos++\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":8,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4923,"Name":"setMicVolume","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\nif (params.MicVolume.Volume) {\n var volume = parseInt(params.MicVolume.Volume)\n volume = decimalToHex(volume)\n volume = ('00' + volume).slice(-2).toUpperCase()\n}\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase()\nvar command = '02'\nvar keyLength = '02'\nvar key = '11'\nvar messageBody = command + keyLength + key + volume\nvar checksum = byteStringToByteArray(messageBody)\nchecksum = crc16byte(checksum)\nchecksum = decimalToHex(checksum).toUpperCase()\nchecksum = ('0000' + checksum).slice(-4)\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2)\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0400' + checksum + sequenceID\nvar data = prefix + messageBody\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]},{"Id":4922,"Name":"setWelfareCheck","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = '';\r\nvar value2 = '';\r\nif (params.WelfareCheck.EnableDisableWelfareCheck == 'true') {\r\n value += '1';\r\n var time = params.WelfareCheck.CheckTime * 60; //in minutes\r\n value += ('0000000000000000000000000000000' + decimalToBinary(parseInt(time))).slice(-31);\r\n} else {\r\n value += ('0000000000000000000000000000000' + decimalToBinary(parseInt(3600))).slice(-31); //default\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nif (params.WelfareCheck.DialWarningTime == 'true') {\r\n value2 += '1';\r\n var time = params.WelfareCheck.WarningTime * 60; //in minutes\r\n value2 += ('0000000000000000000000000000000' + decimalToBinary(parseInt(time))).slice(-31);\r\n} else {\r\n value2 += ('0000000000000000000000000000000' + decimalToBinary(parseInt(300))).slice(-31); // default\r\n}\r\nvalue2 = ('00000000' + binaryToHex(value2)).slice(-8).toUpperCase();\r\nvalue2 = changeEndianness(value2);\r\n// join both msg\r\nvalue += value2;\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '09';\r\nvar key = '57';\r\nvar totalLenght = '0B00';\r\nif (params.DeviceVersion.DeviceVersion == '2') { // command not for watch so mic to 10\r\n command = '02';\r\n keyLength = '02';\r\n key = '11';\r\n value = '10';\r\n totalLenght = '0400';\r\n}\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = checksum.toString().substring(2, 4) + checksum.toString().substring(0, 2);\r\nvar prefix = 'AB10' + totalLenght + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString;\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x !== 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin;\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa;\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4921,"Name":"setPhoneSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\r\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\r\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\r\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\r\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\r\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\r\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\r\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\r\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\r\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\r\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\r\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\r\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\r\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\r\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\r\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\r\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\r\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\r\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\r\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\r\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\r\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\r\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\r\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\r\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\r\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\r\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\r\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\r\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\r\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\r\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\r\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\r\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n];\r\n//create the bit table to use with control\r\nvar value = '00000000000000000000';\r\nif (params.PhoneSettings.SMSWhiteList == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.PhoneSettings.SilentCallMode == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.PhoneSettings.ButtonHangUp == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.PhoneSettings.WhiteList == 'true') {\r\n value += '1';\r\n} else {\r\n value += '0';\r\n}\r\nif (params.PhoneSettings.AutoAnswer == 'true') {\r\n value += '1';\r\n if (params.PhoneSettings.AutoAnswerAfterRings) {\r\n value += ('0000000' + decimalToBinary(parseInt(params.PhoneSettings.AutoAnswerAfterRings))).slice(-7);\r\n } else {\r\n value += ('0000000');\r\n }\r\n} else {\r\n value += '00000000';\r\n}\r\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\r\nvalue = changeEndianness(value);\r\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar command = '02';\r\nvar keyLength = '05';\r\nvar key = '33';\r\nvar messageBody = command + keyLength + key + value;\r\nvar checksum = byteStringToByteArray(messageBody);\r\nchecksum = crc16byte(checksum);\r\nchecksum = decimalToHex(checksum);\r\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\r\nchecksum = changeEndianness(checksum);\r\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\r\nvar data = prefix + messageBody;\r\nAddValue('data', data);\r\nAddValue('sequenceNumber', sequenceID);\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 ascii_to_hexa(str) {\r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('')\r\n}\r\n\r\nfunction crc16byte(s) {\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF)\r\n}\r\n\r\nfunction byteStringToByteArray(str) {\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes\r\n}\r\n\r\nfunction decimalToHex(str) {\r\n hexString = str.toString(16);\r\n return hexString\r\n}\r\n\r\nfunction decimalToBinary(x) {\r\n let bin = 0;\r\n let rem, i = 1,\r\n step = 1;\r\n while (x != 0) {\r\n rem = x % 2;\r\n x = parseInt(x / 2);\r\n bin = bin + rem * i;\r\n i = i * 10;\r\n }\r\n return bin\r\n}\r\n\r\nfunction binaryToHex(x) {\r\n var hexa = parseInt(x, 2).toString(16);\r\n return hexa\r\n}\r\n\r\nfunction changeEndianness(string) {\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('')\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":4920,"Name":"setTiltAlertSettings","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5,\n 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,\n 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,\n 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c,\n 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,\n 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b,\n 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,\n 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,\n 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5,\n 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969,\n 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,\n 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,\n 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03,\n 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,\n 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6,\n 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,\n 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,\n 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1,\n 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c,\n 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,\n 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,\n 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447,\n 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,\n 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2,\n 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,\n 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,\n 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c,\n 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0,\n 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,\n 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,\n 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba,\n 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,\n 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n//create the bit table to use with control\nvar value = ''\nif (params.TiltAlert.EnableDisableTiltAlert == 'true') {\n value += '1';\n if (params.TiltAlert.Dial == 'true') {\n value += '1';\n } else {\n value += '0';\n }\n value += '000000';\n if (params.TiltAlert.Angle) {\n var angle = ('00000000' + decimalToBinary(parseInt(params.TiltAlert.Angle))).slice(-8);\n value += angle;\n }\n if (params.TiltAlert.Time) {\n var time = ('0000000000000000' + decimalToBinary(parseInt(params.TiltAlert.Time))).slice(-16);\n value += time;\n }\n} else {\n value = '0';\n}\nvalue = ('00000000' + binaryToHex(value)).slice(-8).toUpperCase();\nvalue = changeEndianness(value);\nvar sequenceID = (+new Date()).toString(16).slice(-4).toUpperCase();\nvar command = '02';\nvar keyLength = '05';\nvar key = '55';\nvar messageBody = command + keyLength + key + value;\nvar checksum = byteStringToByteArray(messageBody);\nchecksum = crc16byte(checksum);\nchecksum = decimalToHex(checksum);\nchecksum = ('0000' + checksum).slice(-4).toUpperCase();\nchecksum = changeEndianness(checksum);\n//Hpw to calculate sequenceID\nvar prefix = 'AB10' + '0700' + checksum + sequenceID;\nvar data = prefix + messageBody;\nAddValue('data', data);\nAddValue('sequenceNumber', sequenceID); //add 20/07\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 ascii_to_hexa(str) {\n var arr1 = [];\n for (var n = 0, l = str.length; n < l; n++) {\n var hex = Number(str.charCodeAt(n)).toString(16);\n arr1.push(hex);\n }\n return arr1.join('');\n}\n\nfunction crc16byte(s) {\n var crc = 0x0000;\n var j, i;\n for (i = 0; i < s.length; i++) {\n c = s[i];\n if (c > 255) {\n throw new RangeError();\n }\n j = (c ^ (crc >> 8)) & 0xFF;\n crc = crcTable[j] ^ (crc << 8);\n }\n return ((crc ^ 0) & 0xFFFF);\n}\n\nfunction byteStringToByteArray(str) {\n var splitStr = []\n var j = 0\n for (let i = 0; i < str.length; i += 2) {\n splitStr[j] = str.substring(i, i + 2)\n j++\n }\n var bytes = []\n var bytePos = 0\n for (let i = 0; i < splitStr.length; i++) {\n var byteStr = splitStr[i]\n var b = parseInt(byteStr, 16)\n if (b < 256) {\n bytes[bytePos] = b\n bytePos++\n }\n }\n return bytes\n}\n\nfunction decimalToHex(str) {\n hexString = str.toString(16);\n return hexString\n}\n\nfunction decimalToBinary(x) {\n let bin = 0;\n let rem, i = 1,\n step = 1;\n while (x != 0) {\n rem = x % 2;\n x = parseInt(x / 2);\n bin = bin + rem * i;\n i = i * 10;\n }\n return bin\n}\n\nfunction binaryToHex(x) {\n var hexa = parseInt(x, 2).toString(16);\n return hexa\n}\n\nfunction changeEndianness(string) {\n const result = [];\n let len = string.length - 2;\n while (len >= 0) {\n result.push(string.substr(len, 2));\n len -= 2;\n }\n return result.join('');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[],"Tags":[]}],"Operations":[{"Id":314,"Name":"OnUpdateProtocol_CareWatch","Operation":"/*\r\nlet configsToUpdate = [];\r\nif (configs.HeartRateMonitor.EnableDisableHeartRateMonitor === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.HeartRateMonitor.EnableDisableHeartRateMonitor,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.HeartRateMonitor.HeartRateDetectingInterval === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.HeartRateMonitor.HeartRateDetectingInterval,\r\n 'value': '10'\r\n });\r\n}\r\nif (configs.StepCounting.EnableDisableStepCounting === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.StepCounting.EnableDisableStepCounting,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.StepCounting.StepCountingInterval === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.StepCounting.StepCountingInterval,\r\n 'value': '10'\r\n });\r\n}\r\nif (configs.DeviceVersion.DeviceVersion === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.DeviceVersion.DeviceVersion,\r\n 'value': '1'\r\n });\r\n}\r\nif (configs.NoActivity.EnableDisableNoActivity === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.NoActivity.EnableDisableNoActivity,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.NoActivity.NoActivity === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.NoActivity.NoActivity,\r\n 'value': '3600'\r\n });\r\n}\r\nif (configs.VoicePrompt.Activity === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Activity,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.AlarmCancel === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.AlarmCancel,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.AlarmComplete === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.AlarmComplete,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.BaseLocation === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.BaseLocation,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Battery === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Battery,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Beep === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Beep,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.BLE === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.BLE,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call1 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call1,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call2 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call2,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call3 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call3,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call4 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call4,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call5 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call5,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call6 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call6,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call7 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call7,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call8 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call8,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call9 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call9,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Call10 === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Call10,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.CallDisconnected === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.CallDisconnected,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.CallError === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.CallError,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.CallHang === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.CallHang,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Charging === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Charging,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Click === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Click,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Fall === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Fall,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Find === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Find,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Motion === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Motion,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.NoMotion === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.NoMotion,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.SOS === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.SOS,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Tilt === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Tilt,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.TiltCancel === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.TiltCancel,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.VoicePrompt.Time === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.VoicePrompt.Time,\r\n 'value': 'true'\r\n });\r\n}\r\nif (configs.EnableControl.Step === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.EnableControl.Step,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.SystemLanguage.Language === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.SystemLanguage.Language,\r\n 'value': 'en-US'\r\n });\r\n}\r\nif (configs.WelfareCheck.EnableDisableWelfareCheck === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.WelfareCheck.EnableDisableWelfareCheck,\r\n 'value': 'false'\r\n });\r\n}\r\nif (configs.WelfareCheck.CheckTime === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.WelfareCheck.CheckTime,\r\n 'value': '60'\r\n });\r\n}\r\nif (configs.WelfareCheck.WarningTime === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.WelfareCheck.WarningTime,\r\n 'value': '10'\r\n });\r\n}\r\nif (configs.WelfareCheck.DialWarningTime === \"\") {\r\n configsToUpdate.push({\r\n 'code': configIds.WelfareCheck.DialWarningTime,\r\n 'value': 'false'\r\n });\r\n}\r\nvar msg = {\r\n 'configsToUpdate': configsToUpdate\r\n};\r\nconsole.log(msg); */","Type":1,"ProtocolActionObjects":[]},{"Id":313,"Name":"Access TEC Roam","Operation":"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\r\n ///////////////////////////////////////////////////////////////////////////////\r\n //\r\n // Roam protocol - please see variables and typical values in order below\r\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\r\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\",\r\n //\r\n // Author: Joe Bloggs\r\n // Created: 01/01/0000\r\n // Last modified: 12/04/2024\r\n //\r\n ///////////////////////////////////////////////////////////////////////////////\r\n if (typeof localTesting === \"undefined\") {\r\n var localTesting = \"False\";\r\n }\r\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\r\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\r\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\r\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\r\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\r\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\r\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\r\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\r\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\r\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\r\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\r\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\r\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\r\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\r\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\r\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\r\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\r\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\r\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\r\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\r\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\r\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\r\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\r\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\r\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\r\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\r\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\r\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\r\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\r\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\r\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\r\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\r\n ];\r\n var codeValues = [];\r\n AddValue(codeValues, 'protocol_template', 'Roam');\r\n AddValue(codeValues, 'product', serverParams.ProductName);\r\n var dataToReceiver = [];\r\n var configsToAck = [];\r\n var configsToUpdate = [];\r\n var configsToSend = [];\r\n if (globalTemplate == \"True\") {\r\n if (raw.startsWith('esendex')) {\r\n AddValue(codeValues, 'rawMsg', raw);\r\n //general SMS message\r\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n return;\r\n }\r\n AddValue(codeValues, 'raw', raw);\r\n AddValue(codeValues, 'rawMsg', rawFromBytes);\r\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\r\n var homeBeacon = '';\r\n var homeWiFi = '';\r\n var contacts = '';\r\n var gps_data = '';\r\n var wifi_data = '';\r\n var status_data = '';\r\n var lbs_data = '';\r\n var beacon_data = '';\r\n var ble_data = '';\r\n var smart_data = '';\r\n //parse header & properties\r\n var message = rawFromBytes;\r\n var properties = message.substring(2, 4);\r\n var lengthLittleEndian = message.substring(4, 8);\r\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\r\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\r\n var messageForReceiver;\r\n var sequenceID = message.substring(12, 16);\r\n var command = message.substring(16, 18);\r\n var index = 18;\r\n var prefix = 'AB' + '00';\r\n var lengthAck = 0;\r\n var ack = '';\r\n var needsAck = false;\r\n var hasConfigs = false;\r\n var general = '';\r\n var timestamp = '';\r\n var info = '';\r\n var customID = '';\r\n latitude = 0;\r\n longitude = 0;\r\n location_accuracy = 0; // GPS location adds the accuracy\r\n location_time = event_time = '';\r\n speed = 0.0;\r\n var location_type = '0';\r\n //var gen_location = '0'; \r\n var i; // general loop counter\r\n var battery_percentage = '';\r\n var cellNetworkSignal = '';\r\n var workMode = '';\r\n //mask bitwise (properties should be '10')\r\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\r\n needsAck = true;\r\n }\r\n // Loop to decode multi-ACK msg\r\n if (message.includes('AB00030008C7')) {\r\n const multiack = message.split('AB00');\r\n for (let i = 1; i < multiack.length; i++) {\r\n message = 'AB00' + multiack[i];\r\n debug(message);\r\n decoder(message);\r\n } // FOR multiACK\r\n } else decoder(message); // IF multiACK\r\n } else if (oystaTemplate == 'True') { // Oysta Template \r\n AddValue(codeValues, 'rawMsg', raw);\r\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\r\n var gen_location = params.gps_data.split(',');\r\n var latitude = gen_location[0];\r\n var longitude = gen_location[1];\r\n var location_accuracy = gen_location[2];\r\n var speed = gen_location[3];\r\n var direction = gen_location[4];\r\n var altitude = gen_location[5];\r\n var satellites = gen_location[6];\r\n var mileage = gen_location[7];\r\n if (location_accuracy !== 0) {\r\n var fix_state = 1;\r\n } else {\r\n var fix_state = 0;\r\n }\r\n AddValue(codeValues, 'latitude', latitude);\r\n AddValue(codeValues, 'longitude', longitude);\r\n AddValue(codeValues, 'speed', speed);\r\n AddValue(codeValues, 'direction', direction);\r\n AddValue(codeValues, 'altitude', altitude);\r\n AddValue(codeValues, 'location_accuracy', location_accuracy);\r\n AddValue(codeValues, 'mileage', mileage);\r\n AddValue(codeValues, 'satellites', satellites);\r\n AddValue(codeValues, 'fix_state', fix_state);\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\r\n var variables = []; //Define array\r\n variables = params.lbs_data.split(',');\r\n var index = 2;\r\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\r\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\r\n AddValue(codeValues, 'mcc', variables[0]);\r\n AddValue(codeValues, 'mnc', variables[1]);\r\n AddValue(codeValues, 'lac', variables[index]);\r\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\r\n AddValue(codeValues, 'cellid', variables[index + 2]);\r\n }\r\n index += 3;\r\n }\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\r\n var bssid_array = params.wifi_data.split(',');\r\n var index = 0;\r\n for (let i = 0; i < (bssid_array.length / 2); i++) {\r\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\r\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\r\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\r\n }\r\n index += 2;\r\n }\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n // when Beacon is detected and it isn't flic BLE detected\r\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\r\n var gen_location = params.beacon_data.split(',');\r\n var latitude = gen_location[0];\r\n var longitude = gen_location[1];\r\n var mac = gen_location[2];\r\n var label = gen_location[3];\r\n AddValue(codeValues, 'latitude', latitude);\r\n AddValue(codeValues, 'longitude', longitude);\r\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\r\n // AddValue(codeValues,'beacon_mac', mac);\r\n //AddValue(codeValues,'beacon_major', 0);\r\n //AddValue(codeValues,'beacon_minor', 0);\r\n //<>,<>,<> \r\n if (mac) {\r\n AddValue(codeValues, 'beacon_mac', mac);\r\n var simpleQuery = [{\r\n 'code': 'Mac',\r\n 'value': mac,\r\n }];\r\n var simpleQueryLabel = {\r\n 'table': 'beacons',\r\n 'select': 'Name',\r\n 'query': simpleQuery\r\n };\r\n var labels = [];\r\n labels.push(JSON.stringify(simpleQueryLabel));\r\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\r\n }\r\n if (params.beacon_major) {\r\n AddValue(codeValues, 'beacon_major', params.beacon_major);\r\n } else {\r\n AddValue(codeValues, 'beacon_major', 0);\r\n }\r\n if (params.beacon_minor) {\r\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\r\n } else {\r\n AddValue(codeValues, 'beacon_minor', 0);\r\n }\r\n //AddValue(codeValues,'oysta_labels', label);\r\n //AddValue(codeValues,'oysta_value', mac);\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\r\n var gen_location = params.ble_data.split(',');\r\n var flag = gen_location[0];\r\n var batLevel = gen_location[1];\r\n var mac2 = gen_location[2];\r\n //var label = gen_location[3];\r\n AddValue(codeValues, 'flagBLE', flag);\r\n AddValue(codeValues, 'batBLE', batLevel);\r\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\r\n // AddValue(codeValues,'beacon_mac', mac);\r\n //AddValue(codeValues,'beacon_major', 0);\r\n //AddValue(codeValues,'beacon_minor', 0);\r\n //<>,<>,<> \r\n if (mac2) {\r\n AddValue(codeValues, 'beacon_mac', mac2);\r\n var simpleQuery2 = [{\r\n 'code': 'Mac',\r\n 'value': mac2,\r\n }];\r\n var simpleQueryLabel2 = {\r\n 'table': 'beacons',\r\n 'select': 'Name',\r\n 'query': simpleQuery2\r\n };\r\n var labels2 = [];\r\n labels2.push(JSON.stringify(simpleQueryLabel2));\r\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\r\n }\r\n if (params.beacon_major) {\r\n AddValue(codeValues, 'beacon_major', params.beacon_major);\r\n } else {\r\n AddValue(codeValues, 'beacon_major', 0);\r\n }\r\n if (params.beacon_minor) {\r\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\r\n } else {\r\n AddValue(codeValues, 'beacon_minor', 0);\r\n }\r\n //AddValue(codeValues,'oysta_labels', label);\r\n //AddValue(codeValues,'oysta_value', mac);\r\n if (location_time) {\r\n AddValue(codeValues, 'location_time', location_time);\r\n }\r\n }\r\n /* meter mas tarde... \r\n if (params.smart_data !== 'undefined') {\r\n var gen_location = params.smart_data.split(',')\r\n var latitude = gen_location[0]\r\n var longitude = gen_location[1]\r\n var location_accuracy = gen_location[2]\r\n var altitude = gen_location[3]\r\n AddValue(codeValues,'latitude', latitude);\r\n AddValue(codeValues,'longitude', longitude);\r\n AddValue(codeValues,'altitude', altitude);\r\n AddValue(codeValues,'location_accuracy', location_accuracy);\r\n }\r\n */\r\n /*else if ((params.event_time) && (params.event_time == '')) {\r\n var event_time = moment.utc().unix();\r\n AddValue(codeValues,'event_time', event_time);\r\n } revisar mas adelante*/\r\n // to parse SMS info from the device\r\n switch (messageTypeLocalCode) {\r\n case 'COMM-SMS': // SMS message sent in\r\n if (params.data.startsWith('Device location request')) {\r\n configsToAck.push(configIds.Controls.RealTimeLocate);\r\n } else if (params.data.startsWith('Set IP ok')) {\r\n configsToAck.push(configIds.Controls.GetCurrentConfig);\r\n } else if (params.data.startsWith('IMEI:')) {\r\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\r\n } else if (params.data.startsWith('Set IP ok')) {\r\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\r\n } else if (params.data.startsWith('flush ok')) {\r\n configsToAck.push(configIds.Controls.GetCurrentConfig);\r\n } else if (params.data.startsWith('Set Roam-')) {\r\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\r\n } else if (params.data.startsWith('set live tracking')) {\r\n configsToAck.push(configIds.Controls.Trace);\r\n } else if (params.data.startsWith('reboot ok')) {\r\n configsToAck.push(configIds.Controls.Reboot);\r\n } else if (params.data.startsWith('GPS')) {\r\n configsToAck.push(configIds.Controls.RealTimeLocate);\r\n var i1 = params.data.search('Now:')\r\n var i2 = params.data.search('Loc Time:')\r\n var i3 = params.data.search('Speed:')\r\n var i4 = params.data.search('Altitude:')\r\n var i5 = params.data.search('Battery:')\r\n var i6 = params.data.search('google')\r\n var eventTime = params.data.substring(i2 + 9, i3)\r\n var Speed = params.data.substring(i3 + 6, i4 - 3)\r\n if (params.data.substring(i4 - 3, i4) == 'mph') {\r\n Speed = Speed * 0.44704\r\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\r\n Speed = Speed / 3.6\r\n }\r\n var latlong = params.data.substring(i6 + 18)\r\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\r\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\r\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\r\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n break;\r\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\r\n //var i1 = params.data.search('IMEI:')\r\n //var i2 = params.data.search('GSM signal quality:')\r\n var i3 = params.data.search('Software version:')\r\n var sub = params.data.substring(i3 + 17, params.data.length)\r\n var i4 = sub.search('version:');\r\n var fwVersion = sub.substring(i4, sub.length);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"fwVersion\", fwVersion);\r\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\r\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\r\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\r\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\r\n break;\r\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\r\n var i1 = params.data.search('Fall alarm:');\r\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\r\n var i2 = params.data.search('level:');\r\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"sensibility\", sensibility);\r\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\r\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\r\n break;\r\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\r\n var i1 = raw.search('1,');\r\n //var i2 = params.data.search('2,');\r\n //var homeBeacon = params.data.substring(i1+2, i2);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"homeBeacon\", raw.substring(i1, raw.length));\r\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\r\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\r\n break;\r\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n var i1 = raw.search('A1:');\r\n if (raw.includes('A2:')) {\r\n var i2 = raw.search('A2:');\r\n } else {\r\n var i2 = raw.search('A10:');\r\n }\r\n var tel = raw.substring(i1 + 4, i2);\r\n AddValue(codeValues, \"EmergencyNumber\", tel);\r\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\r\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\r\n i2 = raw.search('A10:')\r\n tel = raw.substring(i2 + 4, raw.length);\r\n AddValue(codeValues, \"SMSGateway\", tel);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\r\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\r\n AddValue(codeValues, \"ApprovedContacts\", raw.substring(i1, raw.length));\r\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\r\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\r\n break;\r\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n var i1 = params.data.search('APN:')\r\n var i2 = params.data.search('IP:')\r\n var i3 = params.data.search('Move')\r\n var apn = params.data.substring(i1 + 4, i2);\r\n AddValue(codeValues, \"apn\", apn);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\r\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\r\n var serverDetails = params.data.substring(i2 + 3, i3);\r\n AddValue(codeValues, \"server\", serverDetails);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\r\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\r\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n break;\r\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\r\n var i3 = params.data.search('Speed:')\r\n var i4 = params.data.search('Altitude:')\r\n var i5 = params.data.search('Battery:')\r\n var i6 = params.data.search('google')\r\n var eventTime = params.data.substring(0, i3)\r\n var Speed = params.data.substring(i3 + 6, i4 - 3)\r\n if (params.data.substring(i4 - 3, i4) == 'mph') {\r\n Speed = Speed * 0.44704\r\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\r\n Speed = Speed / 3.6\r\n }\r\n var latlong = params.data.substring(i6 + 18)\r\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\r\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n break;\r\n }\r\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \r\n var event_time = moment.utc().unix();\r\n AddValue(codeValues, 'event_time', event_time);\r\n }\r\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \r\n // var location_time = moment.utc().unix();\r\n // AddValue(codeValues, 'location_time', location_time);\r\n //}\r\n }\r\n var dataToReceiver = {\r\n 'values': codeValues\r\n };\r\n if (configsToAck.length > 0) {\r\n dataToReceiver.configsToAck = configsToAck\r\n };\r\n if (configsToUpdate.length > 0) {\r\n dataToReceiver.configsToUpdate = configsToUpdate\r\n };\r\n if (configsToSend.length > 0) {\r\n dataToReceiver.configsToSend = configsToSend\r\n };\r\n console.log(dataToReceiver);\r\n //}\r\n //return {\r\n // 'output': dataToReceiver\r\n //}\r\n // end of main operation\r\n // define functions used in operation\r\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n codeValueArray.push(cvpair);\r\n }\r\n\r\n function decoder(str) { // decode rawdata\r\n // CARE Decoder\r\n AddValue(codeValues, 'Message : ', str);\r\n var message = str;\r\n // need to check if checksum is correct for possible msg corruption 10/03/23\r\n var checksum = message.substring(8, 12);\r\n var messageBody = message.substring(16, message.length);\r\n debug('message =' + message);\r\n debug('checksum =' + checksum);\r\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\r\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\r\n debug(\"message has valid checksum\");\r\n var messageBody = command; // update value for the ACK\r\n debug('command =' + command);\r\n if (command == '01') {\r\n while (index < total_length + 16) {\r\n // gen_location = '0'; //cambiado 30/09\r\n var keyLengthHex = message.substring(index, index = index + 2);\r\n var keyLength = 2 * hexToDecimal(keyLengthHex);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n debug('key = ' + key);\r\n debug('value = ' + value);\r\n switch (key) {\r\n //Device ID\r\n case '01':\r\n var imei = hex_to_ascii(value);\r\n break;\r\n //Alarm code\r\n case '02':\r\n var alarm = 'CYC';\r\n var alarmCode = value.substring(0, 8);\r\n alarmCode = changeEndianness(alarmCode);\r\n var timestampHex = value.substring(8, 16);\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n event_time = timestamp;\r\n var alarmCodeInt = hexToDecimal(alarmCode);\r\n var alarmCodeExt = value.substring(16, 24);\r\n alarmCodeExt = changeEndianness(alarmCodeExt);\r\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\r\n //Extended Alerts\r\n // Fall off\r\n if ((alarmCodeExtInt & 1) == 1) {\r\n var alarm = 'ALF-C';\r\n }\r\n // Welfare Check-out\r\n else if ((alarmCodeExtInt & 2) == 2) {\r\n var alarm = 'ALA-C';\r\n }\r\n // Standard Alerts\r\n //Battery low\r\n else if ((alarmCodeInt & 1) == 1) {\r\n var alarm = 'BATL';\r\n }\r\n //Overspeed\r\n else if ((alarmCodeInt & 2) == 2) {\r\n var alarm = 'ALSP';\r\n }\r\n //Fall\r\n else if ((alarmCodeInt & 4) == 4) {\r\n var alarm = 'ALF';\r\n }\r\n //Tilt\r\n else if ((alarmCodeInt & 8) == 8) {\r\n var alarm = 'Tilt';\r\n } else if ((alarmCodeInt & 16) == 16) {\r\n if ((alarmCodeInt & 16777216) == 16777216) {\r\n var alarm = 'Geo1-IN';\r\n } else {\r\n var alarm = 'Geo1-OUT';\r\n }\r\n } else if ((alarmCodeInt & 32) == 32) {\r\n if ((alarmCodeInt & 33554432) == 33554432) {\r\n var alarm = 'Geo2-IN';\r\n } else {\r\n var alarm = 'Geo2-OUT';\r\n }\r\n } else if ((alarmCodeInt & 64) == 64) {\r\n if ((alarmCodeInt & 67108864) == 67108864) {\r\n var alarm = 'Geo3-IN';\r\n } else {\r\n var alarm = 'Geo3-OUT';\r\n }\r\n } else if ((alarmCodeInt & 128) == 128) {\r\n if ((alarmCodeInt & 134217728) == 134217728) {\r\n var alarm = 'Geo4-IN';\r\n } else {\r\n var alarm = 'Geo4-OUT';\r\n }\r\n }\r\n //Power Off\r\n else if ((alarmCodeInt & 256) == 256) {\r\n var alarm = 'PWRF';\r\n }\r\n //Power On\r\n else if ((alarmCodeInt & 512) == 512) {\r\n var alarm = 'PWRN';\r\n }\r\n //Motion\r\n else if ((alarmCodeInt & 1024) == 1024) {\r\n var alarm = 'ALMOV';\r\n }\r\n //No Motion\r\n else if ((alarmCodeInt & 2048) == 2048) {\r\n var alarm = 'ALNM';\r\n }\r\n //SOS\r\n else if ((alarmCodeInt & 4096) == 4096) {\r\n var alarm = 'ALSOS';\r\n } else if ((alarmCodeInt & 8192) == 8192) {\r\n var alarm = 'Side1';\r\n } else if ((alarmCodeInt & 16384) == 16384) {\r\n var alarm = 'Side2';\r\n }\r\n //Battery charging\r\n else if ((alarmCodeInt & 32768) == 32768) {\r\n var alarm = 'BATCN';\r\n }\r\n //Battery no charging\r\n else if ((alarmCodeInt & 65536) == 65536) {\r\n var alarm = 'BATCF';\r\n }\r\n //SOS Ending\r\n // Temporary Commented until we know exactly how it works. 22/09/2022\r\n else if ((alarmCodeInt & 131072) == 131072) {\r\n var alarm = 'SOSEnding';\r\n info = 'Alarm Finished';\r\n }\r\n //Amber Alert EC03 only\r\n else if ((alarmCodeInt & 262144) == 262144) {\r\n var alarm = 'ALAO';\r\n }\r\n // welfare Alert check-in ALA-O\r\n else if ((alarmCodeInt & 524288) == 524288) {\r\n var alarm = 'ALA-O';\r\n }\r\n // Amber alert Ending ALA-C\r\n else if ((alarmCodeInt & 1048576) == 1048576) {\r\n var alarm = 'ALA-C';\r\n }\r\n // Amber alert Ending ALA-C\r\n //else if ((alarmCodeInt & 1048576) == 1048576) {\r\n // var alarm = 'ALA-C';\r\n //}\r\n // Fall-Down Alert ending\r\n else if ((alarmCodeInt & 2097152) == 2097152) {\r\n var alarm = 'ALF-C';\r\n }\r\n // welfare Alert Ending ALA\r\n else if ((alarmCodeInt & 4194304) == 4194304) {\r\n var alarm = 'ALA';\r\n }\r\n // Beacon absent Alert 11/10/22. Need to be added in msg types\r\n //else if ((alarmCodeInt & 16777216) == 16777216) {\r\n // var alarm = 'BEA';\r\n //}\r\n general += 'alarm:' + alarm + ',';\r\n break;\r\n //Custom ID\r\n case '03':\r\n // in value is customID.... '06' for Watch Care\r\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\r\n //update customID to check if belongs to this type of device\r\n customID = value;\r\n if (value != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n } else {\r\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\r\n sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n AddValue(codeValues, \"customID\", value);\r\n general += 'customID:' + value + ',';\r\n break;\r\n }\r\n //Historical Data Completed\r\n case '10': // indica q se han terminado de enviar todos los datos historicos.\r\n var histData = true;\r\n break;\r\n //GPS location\r\n case '20':\r\n location_type = 'GPS';\r\n var latitudeHex = value.substring(0, 8);\r\n var longitudeHex = value.substring(8, 16);\r\n var speedHex = value.substring(16, 20);\r\n var directionHex = value.substring(20, 24);\r\n var altitudeHex = value.substring(24, 28);\r\n var location_accuracyHex = value.substring(28, 32);\r\n var mileageHex = value.substring(32, 40);\r\n var satellitesHex = value.substring(40, 42);\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\r\n var direction = hexToDecimal(changeEndianness(directionHex));\r\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\r\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\r\n // Range: 0.5 to 99.9 \r\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\r\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\r\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\r\n var satellites = hexToDecimal(satellitesHex);\r\n // location_time = timestamp;\r\n //<>,<>,<>,<>,<>\r\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\r\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\r\n break;\r\n //WIFI Towers\r\n case '22':\r\n location_type = 'WIFI';\r\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\r\n //location_time = timestamp;\r\n var wifiTowers = value;\r\n general += 'wifiTowers:';\r\n var indexWifi = 0;\r\n var bssid_array = [];\r\n wifi_data = '';\r\n for (let i = 0; i < numWifi; i++) {\r\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\r\n indexWifi += 14;\r\n }\r\n wifi_data = wifi_data.slice(0, -1);\r\n general += wifi_data;\r\n break;\r\n //BLE Location Added 10/10/22\r\n case '23':\r\n location_type = 'BLE';\r\n var mac = value.substring(0, 12);\r\n var latitudeHex = value.substring(12, 20);\r\n var longitudeHex = value.substring(20, 28);\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n var address = hex_to_ascii(value.substring(28, value.length));\r\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\r\n // add : format in MAC\r\n mac = mac.match(/.{1,2}/g).join(':');\r\n // location_time = timestamp;\r\n ble_data = `${latitude},${longitude},${mac},${address}`;\r\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\r\n break;\r\n //General Data , status_data\r\n case '24':\r\n //var general = 'true'\r\n if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }\r\n if (alarmCode) {\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\r\n } else if (statusDevice) {\r\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\r\n }\r\n //else {\r\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\r\n //}\r\n // reset variables\r\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\r\n var timestampHex = value.substring(0, 8);\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n location_time = timestamp;\r\n // HardCode to fix possible issue in protocol\r\n // event_time = timestamp; \r\n event_time = moment.utc().unix();\r\n // end of hard code\r\n var statusHex = changeEndianness(value.substring(8, 16));\r\n var statusInt = hexToDecimal(statusHex);\r\n var statusDevice = '';\r\n if ((statusInt & 1) == 1) {\r\n statusDevice += 'GPS,';\r\n }\r\n if ((statusInt & 2) == 2) {\r\n statusDevice += 'WIFISource,';\r\n }\r\n if ((statusInt & 4) == 4) {\r\n statusDevice += 'CellTower,';\r\n }\r\n if ((statusInt & 8) == 8) {\r\n statusDevice += 'BLELocation,';\r\n }\r\n //params.BatteryStatus.BatteryStatus = '1';\r\n if ((statusInt & 16) == 16) {\r\n statusDevice += 'Charging,';\r\n // var alarm = 'BATCN';\r\n //configs.BatteryStatus.BatteryStatus = '1';\r\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\r\n hasConfigs = true;\r\n var batteryStatus = '1';\r\n var alarm = 'BATCN';\r\n let configsToUpdate = [];\r\n configsToUpdate.push({\r\n 'code': configIds.BatteryStatus.BatteryStatus,\r\n 'value': batteryStatus\r\n });\r\n }*/\r\n }\r\n if ((statusInt & 32) == 32) {\r\n statusDevice += 'FUllyCharged,';\r\n //var alarm = 'BATF';\r\n // configs.BatteryStatus.BatteryStatus = '3';\r\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\r\n hasConfigs = true;\r\n var batteryStatus = '3';\r\n var alarm = 'BATF';\r\n let configsToUpdate = [];\r\n configsToUpdate.push({\r\n 'code': configIds.BatteryStatus.BatteryStatus,\r\n 'value': batteryStatus\r\n });\r\n }*/\r\n }\r\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\r\n statusDevice += 'Not Charging,';\r\n var alarm = 'BATCF';\r\n //configs.BatteryStatus.BatteryStatus = '2';\r\n if (configs.BatteryStatus.BatteryStatus !== '2') {\r\n var batteryStatus = '2';\r\n var alarm = 'BATCF';\r\n let configsToUpdate = [];\r\n configsToUpdate.push({\r\n 'code': configIds.BatteryStatus.BatteryStatus,\r\n 'value': batteryStatus\r\n });\r\n }\r\n }*/\r\n if ((statusInt & 64) == 64) {\r\n statusDevice += 'Reboot,';\r\n }\r\n if ((statusInt & 128) == 128) {\r\n statusDevice += 'HistoricalData,';\r\n }\r\n if ((statusInt & 256) == 256) {\r\n statusDevice += 'AGPSDataValid,';\r\n }\r\n if ((statusInt & 512) == 512) {\r\n statusDevice += 'Motion,';\r\n }\r\n if ((statusInt & 1024) == 1024) {\r\n statusDevice += 'SmartLocating,';\r\n }\r\n if ((statusInt & 2048) == 2048) { //isHome\r\n statusDevice += 'BeaconLocation,';\r\n }\r\n if ((statusInt & 4096) == 4096) {\r\n statusDevice += 'BLEConnected,';\r\n }\r\n if ((statusInt & 16384) == 16384) {\r\n statusDevice += 'HomeWiFi,';\r\n }\r\n statusDevice = statusDevice.slice(0, -1);\r\n status_data = statusDevice; //to oysta template\r\n //statusHex = (statusHex);\r\n statusHex = hex2bin(statusHex);\r\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\r\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\r\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\r\n workMode = parseInt(statusHex.substring(13, 16), 2);\r\n general += 'statusDevice:' + statusDevice + ',';\r\n if (battery_percentage) {\r\n general += 'battery:' + battery_percentage + ',';\r\n }\r\n if (cellNetworkSignal) {\r\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\r\n }\r\n if (workMode) {\r\n general += 'workMode:' + workMode + ',';\r\n }\r\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\r\n break;\r\n //Call Records\r\n case '25':\r\n //Needed?\r\n break;\r\n //BLE Location 2\r\n case '26':\r\n //I don't understand\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //Smart Location\r\n case '27':\r\n location_type = 'SMART';\r\n var latitudeHex = value.substring(0, 8);\r\n var longitudeHex = value.substring(8, 16);\r\n var location_accuracyHex = value.substring(16, 20);\r\n var altitudeHex = value.substring(20, 24);\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\r\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\r\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\r\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\r\n //location_time = timestamp;\r\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\r\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\r\n break;\r\n //Beacon Location Added 11/10/22\r\n case '28':\r\n location_type = 'BEACON';\r\n // var alarm = 'EBZI';\r\n var latitudeHex = '00';\r\n var longitudeHex = '00';\r\n var descr = 'empty';\r\n var flag = hexToDecimal(value.substring(0, 1));\r\n var beacId = hexToDecimal(value.substring(1, 2));\r\n // msg includes descrip\r\n if ((flag & 4) == 4) {\r\n descr = hex_to_ascii(value.substring(18, value.length));\r\n }\r\n // msg includes lat/lon\r\n if ((flag & 8) == 8) {\r\n latitudeHex = value.substring(18, 26);\r\n longitudeHex = value.substring(26, 34);\r\n }\r\n // msg includes lat/lon and description\r\n if ((flag & 12) == 12) {\r\n latitudeHex = value.substring(18, 26);\r\n longitudeHex = value.substring(26, 34);\r\n descr = hex_to_ascii(value.substring(34, value.length));\r\n }\r\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\r\n // add : format in MAC\r\n mac = mac.match(/.{1,2}/g).join(':');\r\n var rssiHex = value.substring(14, 16);\r\n var rssi1Hex = value.substring(16, 18);\r\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\r\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\r\n // var latitudeHex = value.substring(18, 26);\r\n // var longitudeHex = value.substring(26, 34);\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n //location_time = timestamp;\r\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\r\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\r\n break;\r\n // Beacon V2\r\n case '2C':\r\n location_type = 'BEACON';\r\n // var alarm = 'EBZI';\r\n var latitudeHex = '00';\r\n var longitudeHex = '00';\r\n var descr = 'empty';\r\n var flag = hexToDecimal(value.substring(0, 1));\r\n var beacId = hexToDecimal(value.substring(1, 2));\r\n // msg includes descrip\r\n if ((flag & 4) == 4) {\r\n let desc_leng = hexToDecimal(value.substring(20, 22));\r\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\r\n //descr = hex_to_ascii(value.substring(18, value.length));\r\n }\r\n // msg includes lat/lon\r\n if ((flag & 8) == 8) {\r\n latitudeHex = value.substring(18, 26);\r\n longitudeHex = value.substring(26, 34);\r\n }\r\n // msg includes lat/lon and description\r\n if ((flag & 12) == 12) {\r\n latitudeHex = value.substring(20, 28);\r\n longitudeHex = value.substring(28, 36);\r\n let desc_leng = hexToDecimal(value.substring(36, 38));\r\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\r\n }\r\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\r\n // add : format in MAC\r\n mac = mac.match(/.{1,2}/g).join(':');\r\n var rssiHex = value.substring(14, 16);\r\n var rssi1Hex = value.substring(16, 18);\r\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\r\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\r\n var battery_beacon = hexToDecimal(value.substring(18, 20));\r\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\r\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\r\n //location_time = timestamp;\r\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\r\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\r\n break;\r\n //Cell Towers Note\r\n case '29':\r\n location_type = 'LBS';\r\n lbs_data = '';\r\n var mccHex = changeEndianness(value.substring(0, 4));\r\n var mncHex = value.substring(4, 6);\r\n var mcc = hexToDecimal(mccHex);\r\n lbs_data += mcc + ',';\r\n var mnc = hexToDecimal(mncHex);\r\n lbs_data += mnc + ',';\r\n var indexLbs = 6;\r\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\r\n for (let i = 0; i < numTowers; i++) {\r\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\r\n var rxl = hexToDecimal(rxlHex);\r\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\r\n var lac = hexToDecimal(lacHex);\r\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\r\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\r\n indexLbs += 14;\r\n }\r\n lbs_data = lbs_data.slice(0, -1);\r\n general += lbs_data;\r\n break;\r\n case '30':\r\n //G-sensor. \r\n if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }\r\n var numStep = (keyLength - 2) / 16;\r\n for (let j = 0; j < numStep; j++) {\r\n var timestampHex = value.substring(0, 8);\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n //timestamp = hexToDecimalSigned(timestampHex);\r\n var stepHex = value.substring(8, 16);\r\n stepHex = changeEndianness(stepHex);\r\n var stepRate = hexToDecimal(stepHex);\r\n info = stepRate;\r\n //var alarmCode = 'True';\r\n var alarm = 'STP';\r\n general += ' step counting' + j + ':' + stepRate + ',';\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n break;\r\n //Activity\r\n case '31':\r\n //I don't understand\r\n break;\r\n //BLE MAC list\r\n case '32':\r\n //I don't understand\r\n break;\r\n //Beacon List\r\n case '33':\r\n //I don't understand\r\n break;\r\n //Heart Rate Data\r\n case '40':\r\n if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }\r\n var numHeartRate = (keyLength - 2) / 12;\r\n for (let j = 0; j < numHeartRate; j++) {\r\n var timestampHex = value.substring(0, 8);\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n //timestamp = hexToDecimalSigned(timestampHex);\r\n var heartRateHex = value.substring(8, 10);\r\n var heartRate = hexToDecimal(heartRateHex);\r\n var trustLevelHex = value.substring(10, 12);\r\n var trustLevel = hexToDecimal(trustLevelHex);\r\n info = heartRate;\r\n //var alarmCode = 'True';\r\n var alarm = 'HRT';\r\n general += ' heart rate' + j + ':' + heartRate + ',';\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n break;\r\n //BLE Connected . For Flic button\r\n case '62':\r\n location_type = 'BLE';\r\n //var alarm = 'EBZI'; \r\n //var latitudeHex = '00';\r\n //var longitudeHex = '00';\r\n //var descr = 'empty';\r\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\r\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\r\n // add : format in MAC\r\n mac = mac.match(/.{1,2}/g).join(':');\r\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\r\n //location_time = timestamp;\r\n ble_data = `${flag},${batLevel},${mac}`;\r\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\r\n break;\r\n }\r\n }\r\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\r\n // \"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\",\r\n if (alarmCode) {\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else if (statusDevice) {\r\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n /*else if (alarm === 'HRT') {\r\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else if (alarm === 'STP') {\r\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else {\r\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }*/\r\n // rest the alarm value\r\n alarm = '';\r\n }\r\n if (command == '02') {\r\n while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n switch (key) {\r\n //Module Number\r\n case '01':\r\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //Firmware version\r\n case '02':\r\n //no ACK need\r\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"fwVersion\", fwVersion);\r\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\r\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\r\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\r\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '1A':\r\n //no ACK need\r\n var fwVersion = hex_to_ascii(value);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n AddValue(codeValues, \"fwVersion\", fwVersion);\r\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\r\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\r\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\r\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\r\n break;\r\n //IMEI\r\n case '03':\r\n var imei = hexToDecimal(value);\r\n // harcode to avoid conflicts with Rio protocol\r\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\r\n // AddValue(codeValues, \"error\", \"device imei is not in this protocol\");\r\n // AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n //AddValue(codeValues, \"IMEI\", imei);\r\n // return\r\n //}\r\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\r\n sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //ICCID\r\n case '04':\r\n var iccid = hexToDecimal(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //BLE-MAC\r\n case '05':\r\n var bleMac = hexToDecimal(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n //Run Time\r\n case '07':\r\n var runTime = hexToDecimal(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '10': // Ringer Volume\r\n var volume = hexToDecimal(value);\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"Volume\", volume);\r\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\r\n configsToAck.push(configIds.ReadSystemSettings.Volume);\r\n break;\r\n case '0A': //Performance mode\r\n //var workMode = hexToDecimal(value);\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n //AddValue(codeValues, \"WorkMode\", workMode);\r\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\r\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\r\n //var workMode = hex_to_ascii(value.substring(0, value.length));\r\n //var workMode = hexToDecimal(value);\r\n //var workMode = hex_to_ascii(value.substring(0, value.length));\r\n var workMode = 1234; // + value + \"end\";\r\n //var workModeVal = 9;\r\n //workMode = 'test10';\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\r\n AddValue(codeValues, \"Mode\", workMode);\r\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\r\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n //AddValue(codeValues, \"performanceMode\", performanceMode);\r\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\r\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\r\n break;\r\n case '1B':\r\n //Decimal o ascii?\r\n var gsmModule = hexToDecimal(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '1F':\r\n //System Language\r\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\r\n imei = serverParams.Imei;\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"SystemLanguage\", systemLanguage);\r\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\r\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\r\n break;\r\n case '33': // phone option\r\n // [Value]:83 0B 00 00 {\"phoneOption\":{\"flag_value\":2947,\"s3\":1,\"s4\":0,\"s5\":1,\"s6\":0,\"callIncoming\":0,\"rings\":3,\"s7\":0,\"toneID\":0,\"s1\":1,\"s2\":1}}\r\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\r\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\r\n var auto = 'true';\r\n } else var auto = 'false';\r\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\r\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\r\n allow = 'true';\r\n } else var allow = 'false';\r\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\r\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\r\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\r\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\r\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\r\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\r\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\r\n break;\r\n case '30': //ContactList\r\n var contactNumber = value.substring(1, 2);\r\n var telLength = hexToDecimal(value.substring(2, 4));\r\n var tel = '';\r\n switch (contactNumber) {\r\n // Emergency Number\r\n case '0':\r\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\r\n AddValue(codeValues, \"EmergencyNumber\", tel);\r\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\r\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\r\n break;\r\n // Speed Dial Number\r\n case '1':\r\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\r\n AddValue(codeValues, \"SpeedDialNumber\", tel);\r\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\r\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\r\n break;\r\n // Gateway Number\r\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\r\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\r\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\r\n tel = 'Esendex UK'\r\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\r\n tel = 'Esendex Spain'\r\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\r\n tel = 'Esendex UK Acceptance'\r\n } else {\r\n tel = 'Default'\r\n }\r\n AddValue(codeValues, \"SMSGateway\", tel);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\r\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\r\n break;\r\n default:\r\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\r\n if (tel.length < 6) {\r\n break;\r\n }\r\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\r\n AddValue(codeValues, \"ApprovedContacts\", contacts);\r\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\r\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\r\n break;\r\n }\r\n break;\r\n case '40': // APN\r\n //no ACK need\r\n var apn = hex_to_ascii(value.substring(0, value.length));\r\n imei = serverParams.Imei;\r\n break;\r\n case '41': // APN Username\r\n //no ACK need\r\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\r\n break;\r\n case '42': // APN Password\r\n //no ACK need\r\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\r\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"apn\", apn);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\r\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\r\n break;\r\n case '43': //Server Details\r\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\r\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\r\n if (serverDetails.includes('52.232.85.255:5678')) {\r\n serverDetails = 'Production'\r\n } else if (serverDetails.includes('52.174.17.77:5678')) {\r\n serverDetails = 'Acceptance'\r\n } else if (serverDetails.includes('52.174.17.77:5778')) {\r\n serverDetails = 'Protocol-Import'\r\n } else {\r\n serverDetails = 'Default'\r\n }\r\n AddValue(codeValues, \"server\", serverDetails);\r\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\r\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\r\n break;\r\n case '44': //time interval - work mode intervals\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\r\n var workMode = 0;\r\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\r\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\r\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\r\n //workMode = 'High Frequency';\r\n workMode = 3;\r\n }\r\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\r\n //workMode = 'Balanced';\r\n workMode = 2;\r\n }\r\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\r\n //workMode = 'Power Saving';\r\n workMode = 1;\r\n }\r\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\r\n //workMode = 'No Reporting';\r\n workMode = 0;\r\n }\r\n AddValue(codeValues, \"Mode\", workMode);\r\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\r\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n break;\r\n case '47': // Custom Id\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"customeid\", value);\r\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\r\n configsToAck.push(configIds.ReadState.CustomId);\r\n break;\r\n case '53': // Non motion alert\r\n //2B020080\r\n var status = hex2bin(value.substring(6, 8));\r\n var alertSetting = '';\r\n var enableDisable = '';\r\n if (status.substring(0, 1) == '1') {\r\n alertSetting = 'Enable, '\r\n enableDisable = '1';\r\n } else {\r\n alertSetting = 'Disable, '\r\n };\r\n //if (status.substring(5, 6) == '1') {\r\n // alertSetting += 'Dial, '\r\n //} else {\r\n // alertSetting += 'No Dial, '\r\n //};\r\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\r\n alertSetting += time;\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"nomotion\", alertSetting);\r\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\r\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\r\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\r\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\r\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\r\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\r\n break;\r\n case '56': //Fall down sensibility\r\n // '00001100'\r\n var fallStatus = hex2bin(value.substring(0, 2));\r\n var enalbleDisable = '';\r\n //if (fallStatus.substring(4, 5) == '1') {\r\n if (fallStatus.substring(0, 1) == '1') {\r\n var sensibility = 'Enable, '\r\n enalbleDisable = '1'\r\n } else {\r\n var sensibility = 'Disable, '\r\n };\r\n if (fallStatus.substring(5, 6) == '1') {\r\n sensibility += 'Dial, '\r\n } else {\r\n sensibility += 'No Dial, '\r\n };\r\n var imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\r\n sensibility += sesibityOptionValue;\r\n AddValue(codeValues, \"sensibility\", sensibility);\r\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\r\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\r\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\r\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\r\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\r\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\r\n break;\r\n case '73': //BeaconList\r\n var beaconNumber = hexToDecimal(value.substring(1, 2));\r\n var beaconStatus = hex2bin(value.substring(0, 1));\r\n //if (beaconStatus.substring(4, 5) == '1') {\r\n // homeBeacon += ' Enable, '\r\n //} else {\r\n // homeBeacon += ' Disable, '\r\n //};\r\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\r\n //beaconStatus = changeEndianness(value.substring(30, value.length));\r\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\r\n AddValue(codeValues, \"homeBeacon\", homeBeacon);\r\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\r\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\r\n break;\r\n case '4A': //Wifi Network List\r\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\r\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\r\n var wifiIndex = hexToDecimal(value.substring(1, 2));\r\n var wifiStatus = hexToDecimal(value.substring(0, 1));\r\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\r\n /var homeWifi = '';\r\n if (wifiIndex == '0') { // Only first Wifi of the list\r\n if (wifiStatus == '8') {\r\n homeWifi += ' Enable, '\r\n enalbleDisable = '1';\r\n } else {\r\n homeWifi += ' Disable, '\r\n //enalbleDisable = '0';\r\n };*/\r\n if (wifiStatus == '8') {\r\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\r\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\r\n var imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\r\n AddValue(codeValues, \"wifi\", homeWiFi);\r\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\r\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\r\n }\r\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\r\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\r\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\r\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\r\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\r\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\r\n break;\r\n case '21': // Speed Dial Settings\r\n // [Value]:53 84 {\"call1Button\":{\"mode\":0,\"feedBack\":3,\"task\":2,\"time\":20,\"status\":1}}\r\n var status = hex2bin(value.substring(2, 3));\r\n var alertSetting = '';\r\n var enableDisable = '';\r\n if (status.substring(0, 1) == '1') {\r\n alertSetting = 'Enable, '\r\n enableDisable = '1';\r\n } else {\r\n alertSetting = 'Disable, '\r\n //enableDisable = '0';\r\n };\r\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\r\n //alertSetting += time;\r\n imei = serverParams.Imei;\r\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n AddValue(codeValues, \"speed\", alertSetting);\r\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\r\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\r\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\r\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\r\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\r\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\r\n break;\r\n }\r\n }\r\n }\r\n if (command == '03') {\r\n while (index < total_length + 16) {\r\n var keyLengthHex = message.substring(index, index = index + 2);\r\n var keyLength = 2 * hexToDecimal(keyLengthHex);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n debug('key = ' + key);\r\n debug('value = ' + value);\r\n switch (key) {\r\n case '01': // Device ID\r\n var imei = hex_to_ascii(value);\r\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\r\n sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n break;\r\n //CustomID is not provided so far with command type 03.. commented in the mean time\r\n /* case '03':\r\n //update customID to check if belongs to this type of device\r\n customID = value;\r\n if (value != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n } else {\r\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\r\n sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");\r\n }\r\n AddValue(codeValues, \"customID\", value);\r\n general += 'customID:' + value + ',';\r\n break;\r\n }\r\n break; */\r\n case '10': // Heartbeat\r\n var heartbeat = hex_to_ascii(value);\r\n event_time = moment.utc().unix();\r\n if (index < total_length + 16) {\r\n var keyLengthHex = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLengthHex);\r\n key = message.substring(index, index = index + 2);\r\n if (key == '24') {\r\n // debug('key: ' + key) //comment those out\r\n value = message.substring(index, index = index + keyLength - 2);\r\n // debug(value)\r\n var timestampHex = value.substring(0, 8);\r\n // debug('timestampt hex: ' + timestampHex)\r\n timestampHex = changeEndianness(timestampHex);\r\n timestamp = hexToDecimal(timestampHex);\r\n event_time = timestamp;\r\n // debug(event_time)\r\n var statusHex = changeEndianness(value.substring(8, 16));\r\n // debug(statusHex)\r\n var statusInt = hexToDecimal(statusHex);\r\n var statusDevice = '';\r\n if ((statusInt & 1) == 1) {\r\n statusDevice += 'GPS,';\r\n }\r\n if ((statusInt & 2) == 2) {\r\n statusDevice += 'WIFISource,';\r\n }\r\n if ((statusInt & 4) == 4) {\r\n statusDevice += 'CellTower,';\r\n }\r\n if ((statusInt & 8) == 8) {\r\n statusDevice += 'BLELocation,';\r\n }\r\n if ((statusInt & 16) == 16) {\r\n statusDevice += 'Charging,';\r\n }\r\n if ((statusInt & 32) == 32) {\r\n statusDevice += 'FUllyCharged,';\r\n }\r\n if ((statusInt & 64) == 64) {\r\n statusDevice += 'Reboot,';\r\n }\r\n if ((statusInt & 128) == 128) {\r\n statusDevice += 'HistoricalData,';\r\n }\r\n if ((statusInt & 256) == 256) {\r\n statusDevice += 'AGPSDataValid,';\r\n }\r\n if ((statusInt & 512) == 512) {\r\n statusDevice += 'Motion,';\r\n }\r\n if ((statusInt & 1024) == 1024) {\r\n statusDevice += 'SmartLocating,';\r\n }\r\n if ((statusInt & 2048) == 2048) {\r\n statusDevice += 'BeaconLocation,';\r\n }\r\n if ((statusInt & 4096) == 4096) {\r\n statusDevice += 'BLEConnected,';\r\n }\r\n statusDevice = statusDevice.slice(0, -1);\r\n // debug('statusHex:' + statusHex)\r\n statusHex = (statusHex);\r\n statusHex = hex2bin(statusHex);\r\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\r\n // debug(statusHex)\r\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\r\n // debug(battery_percentage)\r\n // debug(battery_percentage)\r\n // debug(statusHex.substring(8, 13))\r\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\r\n // debug(cellNetworkSignal)\r\n workMode = parseInt(statusHex.substring(13, 16), 2);\r\n // debug(workMode)\r\n general += 'statusDevice:' + statusDevice + ';';\r\n if (battery_percentage) {\r\n general += 'battery:' + battery_percentage + ';';\r\n }\r\n if (cellNetworkSignal) {\r\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\r\n }\r\n if (workMode) {\r\n general += 'workMode:' + workMode + ';';\r\n }\r\n }\r\n }\r\n // revisar\r\n var gen_location = '0';\r\n //CustomID is not provided so far with command type 03.. commented in the mean time\r\n /*if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }*/\r\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\r\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n //messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '12': // Device requesting timestamp\r\n timestamp = moment.utc().unix();\r\n timestampHex = decimalToHex(timestamp);\r\n timestampHex = changeEndianness(timestampHex);\r\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\r\n // respond to device with the timestamp of the server\r\n messageBody = messageBody + keyLengthHex + key + timestampHex;\r\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n break;\r\n case '21': //Cell Towers\r\n var mccHex = value.substring(0, 2);\r\n var mncHex = value.substring(2, 3);\r\n var mcc = hexToDecimal(mccHex);\r\n var mnc = hexToDecimal(mncHex);\r\n var numTowers = (keyLength - 4) / 5;\r\n var cellTowers = hex_to_ascii(value);\r\n messageBody = messageBody + keyLengthHex + key + value;\r\n break;\r\n case '22': // WIFI locations \r\n location_type = 'WIFI';\r\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\r\n //location_time = timestamp;\r\n var wifiTowers = value;\r\n general += 'wifiTowers:';\r\n var indexWifi = 0;\r\n var bssid_array = [];\r\n gen_location = '';\r\n for (let i = 0; i < numWifi; i++) {\r\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\r\n indexWifi += 14;\r\n }\r\n gen_location = gen_location.slice(0, -1);\r\n general += gen_location;\r\n //CustomID is not provided so far with command type 03\r\n /*if (customID != '04') {\r\n AddValue(codeValues, \"error\", \"customID not belongs to this protocol\");\r\n //AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n AddValue(codeValues, \"customID\", value);\r\n return\r\n }*/\r\n if (alarmCode) {\r\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else if (statusDevice) {\r\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n } else {\r\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n }\r\n alarmCode = '';\r\n break;\r\n }\r\n }\r\n }\r\n if (command == '04') {\r\n while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n }\r\n }\r\n if (command == '7E') {\r\n while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n }\r\n }\r\n if (command == '7F') {\r\n // while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n imei = serverParams.Imei;\r\n AddValue(codeValues, \"imei\", imei);\r\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\r\n sendMessageToLocalhostNoWait(messageForReceiver);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\r\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\r\n //}\r\n }\r\n if (command == 'FE') {\r\n while (index < total_length + 16) {\r\n var keyLength = message.substring(index, index = index + 2);\r\n keyLength = 2 * hexToDecimal(keyLength);\r\n var key = message.substring(index, index = index + 2);\r\n var value = message.substring(index, index = index + keyLength - 2);\r\n }\r\n }\r\n // prepare the ACK msg and change config if it is needed\r\n lengthAck = messageBody.length / 2;\r\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\r\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\r\n ////////////checksum CRC 16\r\n var checksumAck = byteStringToByteArray(messageBody);\r\n checksumAck = crc16byte(checksumAck);\r\n checksumAck = decimalToHex(checksumAck);\r\n checksumAck = ('0000' + checksumAck).slice(-4);\r\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\r\n prefix = prefix + lengthAck + checksumAck + sequenceID;\r\n // To send ACK to the device previous to internal msg with parts\r\n if (needsAck == true) {\r\n if (messageBody.length <= 2) {\r\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\r\n } else {\r\n ack = prefix + messageBody;\r\n }\r\n AddValue(codeValues, 'imei', imei);\r\n AddValue(codeValues, 'ack', ack);\r\n }\r\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \r\n AddValue(codeValues, \"error\", \"checksum failed for message\");\r\n AddValue(codeValues, \"rawFromBytes\", rawFromBytes);\r\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\r\n if (i >= 0) {\r\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\r\n AddValue(codeValues, \"imei\", imei);\r\n }\r\n }\r\n }\r\n\r\n function ascii_to_hexa(str) { // ascii to hex \r\n var arr1 = [];\r\n for (var n = 0, l = str.length; n < l; n++) {\r\n var hex = Number(str.charCodeAt(n)).toString(16);\r\n arr1.push(hex);\r\n }\r\n return arr1.join('');\r\n }\r\n\r\n function byteStringToByteArray(str) { //\r\n var splitStr = [];\r\n var j = 0;\r\n for (let i = 0; i < str.length; i += 2) {\r\n splitStr[j] = str.substring(i, i + 2);\r\n j++;\r\n }\r\n var bytes = [];\r\n var bytePos = 0;\r\n for (let i = 0; i < splitStr.length; i++) {\r\n var byteStr = splitStr[i];\r\n var b = parseInt(byteStr, 16);\r\n if (b < 256) {\r\n bytes[bytePos] = b;\r\n bytePos++;\r\n }\r\n }\r\n return bytes;\r\n }\r\n\r\n function changeEndianness(string) { //\r\n const result = [];\r\n let len = string.length - 2;\r\n while (len >= 0) {\r\n result.push(string.substr(len, 2));\r\n len -= 2;\r\n }\r\n return result.join('');\r\n }\r\n\r\n function hex2bin(hex) { //\r\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\r\n }\r\n\r\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\r\n var checksum = byteStringToByteArray(payloadData);\r\n checksum = crc16byte(checksum);\r\n checksum = decimalToHex(checksum);\r\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\r\n return changeEndianness(checksum);\r\n }\r\n\r\n function crc16byte(s) { //\r\n var crc = 0x0000;\r\n var j, i;\r\n for (i = 0; i < s.length; i++) {\r\n c = s[i];\r\n if (c > 255) {\r\n throw new RangeError();\r\n }\r\n j = (c ^ (crc >> 8)) & 0xFF;\r\n crc = crcTable[j] ^ (crc << 8);\r\n }\r\n return ((crc ^ 0) & 0xFFFF);\r\n }\r\n\r\n function debug(str) { // write debug info to console log, if localTesting\r\n if (localTesting === \"True\") {\r\n console.log(str);\r\n }\r\n }\r\n\r\n function decimalToHex(x) { // decimal to hex\r\n x = x.toString(16).toUpperCase();\r\n return x;\r\n }\r\n\r\n function hex_to_ascii(str1) { // Hex to Ascii \r\n var hex = str1.toString();\r\n var str = '';\r\n for (var n = 0; n < hex.length; n += 2) {\r\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\r\n }\r\n return str;\r\n }\r\n\r\n function hexToDecimalSigned(hex) { // hex to decimal\r\n if (hex.length % 2 != 0) {\r\n hex = \"0\" + hex;\r\n }\r\n var num = parseInt(hex, 16);\r\n var maxVal = Math.pow(2, hex.length / 2 * 8);\r\n if (num > maxVal / 2 - 1) {\r\n num = num - maxVal;\r\n }\r\n return num;\r\n }\r\n\r\n function hexToDecimal(x) {\r\n x = parseInt(x, 16);\r\n return x;\r\n }\r\n\r\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\r\n var server;\r\n if (localTesting) {\r\n console.log('local testing - sending to acceptance server the message ... ');\r\n console.log(str);\r\n server = '52.174.17.77';\r\n } else {\r\n server = '127.0.0.1';\r\n }\r\n var c = net.createConnection(5678, server);\r\n c.on('error', function(error) {\r\n c = net.createConnection(5678, server);\r\n });\r\n c.write(`${str}`);\r\n c.end();\r\n }\r\n // modify to return the object that contains your data\r\n return dataToReceiver;\r\n}\r\n// params is not defined locally -> export as module\r\nif (typeof(params) === 'undefined') {\r\n module.exports = {\r\n execute_ops\r\n }\r\n} else { // on server use local defined vars\r\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\r\n // define global returns\r\n msg = return_values;\r\n}","Type":0,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, configIds.SpeedDialSettings.EnableDisableSpeedDial);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734423608},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, '1');\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configIds.SpeedDialSettings.EnableDisableSpeedDial\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734424064},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var enablePhone = hex2bin(value.substring(0, 1)).substring(0, 1);\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enablePhone);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configIds.SpeedDialSettings.EnableDisableSpeedDial\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734461682},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734462462},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, ';\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, ';\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734463709},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, ';\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enableDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734463932},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 3));\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734520814},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734521810},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n //if (beaconStatus.substring(4, 5) == '1') {\\r\\n // homeBeacon += ' Enable, '\\r\\n //} else {\\r\\n // homeBeacon += ' Disable, '\\r\\n //};\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if (wifiStatus == '8') {\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1734522292},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data to kibana\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n /*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);*/\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function sendDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n console.log(dataToReceiver);\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742549373},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n var localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data to kibana\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n /*var dataToReceiver = {\\r\\n 'values': codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend\\r\\n };\\r\\n console.log(dataToReceiver);*/\\r\\n //}\\r\\n //return {\\r\\n // 'output': dataToReceiver\\r\\n //}\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n function sendDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n console.log(dataToReceiver);\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hex_to_ascii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n sendDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hex_to_ascii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hex_to_ascii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hex_to_ascii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hex_to_ascii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hex_to_ascii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n // CareWatch-CYC;<>;STATUS=<>;TIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;GENERAL=<>;\\r\\n // \\\"CareWatch-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hex_to_ascii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hex_to_ascii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hex2bin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hex2bin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hex2bin(value.substring(0, 2)) + hex2bin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hex_to_ascii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hex_to_ascii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hex_to_ascii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hex_to_ascii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hex2bin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hex2bin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hex2bin(value.substring(0, 1));\\r\\n beaconStatus = hex_to_ascii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hex_to_ascii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hex_to_ascii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hex2bin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hex_to_ascii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hex_to_ascii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hex2bin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hex_to_ascii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hex_to_ascii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n function ascii_to_hexa(str) { // ascii to hex \\r\\n var arr1 = [];\\r\\n for (var n = 0, l = str.length; n < l; n++) {\\r\\n var hex = Number(str.charCodeAt(n)).toString(16);\\r\\n arr1.push(hex);\\r\\n }\\r\\n return arr1.join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { //\\r\\n var splitStr = [];\\r\\n var j = 0;\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n splitStr[j] = str.substring(i, i + 2);\\r\\n j++;\\r\\n }\\r\\n var bytes = [];\\r\\n var bytePos = 0;\\r\\n for (let i = 0; i < splitStr.length; i++) {\\r\\n var byteStr = splitStr[i];\\r\\n var b = parseInt(byteStr, 16);\\r\\n if (b < 256) {\\r\\n bytes[bytePos] = b;\\r\\n bytePos++;\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function changeEndianness(string) { //\\r\\n const result = [];\\r\\n let len = string.length - 2;\\r\\n while (len >= 0) {\\r\\n result.push(string.substr(len, 2));\\r\\n len -= 2;\\r\\n }\\r\\n return result.join('');\\r\\n }\\r\\n\\r\\n function hex2bin(hex) { //\\r\\n return (parseInt(hex, 16).toString(2)).padStart(8, '0');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // check if payload checksum is valid\\r\\n var checksum = byteStringToByteArray(payloadData);\\r\\n checksum = crc16byte(checksum);\\r\\n checksum = decimalToHex(checksum);\\r\\n checksum = ('0000' + checksum).slice(-4).toUpperCase();\\r\\n return changeEndianness(checksum);\\r\\n }\\r\\n\\r\\n function crc16byte(s) { //\\r\\n var crc = 0x0000;\\r\\n var j, i;\\r\\n for (i = 0; i < s.length; i++) {\\r\\n c = s[i];\\r\\n if (c > 255) {\\r\\n throw new RangeError();\\r\\n }\\r\\n j = (c ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[j] ^ (crc << 8);\\r\\n }\\r\\n return ((crc ^ 0) & 0xFFFF);\\r\\n }\\r\\n\\r\\n function debug(str) { // write debug info to console log, if localTesting\\r\\n if (localTesting === \\\"True\\\") {\\r\\n console.log(str);\\r\\n }\\r\\n }\\r\\n\\r\\n function decimalToHex(x) { // decimal to hex\\r\\n x = x.toString(16).toUpperCase();\\r\\n return x;\\r\\n }\\r\\n\\r\\n function hex_to_ascii(str1) { // Hex to Ascii \\r\\n var hex = str1.toString();\\r\\n var str = '';\\r\\n for (var n = 0; n < hex.length; n += 2) {\\r\\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\\r\\n }\\r\\n return str;\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 != 0) {\\r\\n hex = \\\"0\\\" + hex;\\r\\n }\\r\\n var num = parseInt(hex, 16);\\r\\n var maxVal = Math.pow(2, hex.length / 2 * 8);\\r\\n if (num > maxVal / 2 - 1) {\\r\\n num = num - maxVal;\\r\\n }\\r\\n return num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(x) {\\r\\n x = parseInt(x, 16);\\r\\n return x;\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to acceptance server the message ... ');\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5678, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5678, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return dataToReceiver;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742550263},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n const port = 5878; //Protocol-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742635144},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n // event_time = timestamp; \\r\\n event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742645392},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n event_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n //event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n const port = '5878'; //Protocol-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742648212},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Joe Bloggs\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 12/04/2024\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n event_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n //event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5878, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5878, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n /*\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n const port = '5878'; //Protocol-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n } \\r\\n */\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742648816},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Juanmi Navarro\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 22/03/2025\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n event_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n //event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n /*\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5878, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5878, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }*/\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n const port = '5678'; //acceptance-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }*/\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742649832},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n //\\r\\n // Roam protocol - please see variables and typical values in order below\\r\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\r\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\r\\n //\\r\\n // Author: Juanmi Navarro\\r\\n // Created: 01/01/0000\\r\\n // Last modified: 22/03/2025\\r\\n //\\r\\n ///////////////////////////////////////////////////////////////////////////////\\r\\n if (typeof localTesting === \\\"undefined\\\") {\\r\\n let localTesting = \\\"False\\\";\\r\\n }\\r\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\r\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\r\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\r\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\r\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\r\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\r\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\r\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\r\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\r\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\r\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\r\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\r\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\r\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\r\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\r\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\r\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\r\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\r\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\r\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\r\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\r\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\r\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\r\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\r\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\r\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\r\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\r\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\r\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\r\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\r\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\r\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\r\\n ];\\r\\n var codeValues = [];\\r\\n AddValue(codeValues, 'protocol_template', 'Roam');\\r\\n AddValue(codeValues, 'product', serverParams.ProductName);\\r\\n var dataToReceiver = [];\\r\\n var configsToAck = [];\\r\\n var configsToUpdate = [];\\r\\n var configsToSend = [];\\r\\n if (globalTemplate == \\\"True\\\") {\\r\\n if (raw.startsWith('esendex')) {\\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n //general SMS message\\r\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n return;\\r\\n }\\r\\n AddValue(codeValues, 'raw', raw);\\r\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\r\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\r\\n var homeBeacon = '';\\r\\n var homeWiFi = '';\\r\\n var contacts = '';\\r\\n var gps_data = '';\\r\\n var wifi_data = '';\\r\\n var status_data = '';\\r\\n var lbs_data = '';\\r\\n var beacon_data = '';\\r\\n var ble_data = '';\\r\\n var smart_data = '';\\r\\n //parse header & properties\\r\\n var message = rawFromBytes;\\r\\n var properties = message.substring(2, 4);\\r\\n var lengthLittleEndian = message.substring(4, 8);\\r\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\r\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\r\\n var messageForReceiver;\\r\\n var sequenceID = message.substring(12, 16);\\r\\n var command = message.substring(16, 18);\\r\\n var index = 18;\\r\\n var prefix = 'AB' + '00';\\r\\n var lengthAck = 0;\\r\\n var ack = '';\\r\\n var needsAck = false;\\r\\n var hasConfigs = false;\\r\\n var general = '';\\r\\n var timestamp = '';\\r\\n var info = '';\\r\\n var customID = '';\\r\\n latitude = 0;\\r\\n longitude = 0;\\r\\n location_accuracy = 0; // GPS location adds the accuracy\\r\\n location_time = event_time = '';\\r\\n speed = 0.0;\\r\\n var location_type = '0';\\r\\n //var gen_location = '0'; \\r\\n var i; // general loop counter\\r\\n var battery_percentage = '';\\r\\n var cellNetworkSignal = '';\\r\\n var workMode = '';\\r\\n //mask bitwise (properties should be '10')\\r\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\r\\n needsAck = true;\\r\\n }\\r\\n // Loop to decode multi-ACK msg\\r\\n if (message.includes('AB00030008C7')) {\\r\\n const multiack = message.split('AB00');\\r\\n for (let i = 1; i < multiack.length; i++) {\\r\\n message = 'AB00' + multiack[i];\\r\\n debug(message);\\r\\n decoder(message);\\r\\n } // FOR multiACK\\r\\n } else decoder(message); // IF multiACK\\r\\n } else if (oystaTemplate == 'True') { // Oysta Template \\r\\n AddValue(codeValues, 'rawMsg', raw);\\r\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\r\\n var gen_location = params.gps_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var location_accuracy = gen_location[2];\\r\\n var speed = gen_location[3];\\r\\n var direction = gen_location[4];\\r\\n var altitude = gen_location[5];\\r\\n var satellites = gen_location[6];\\r\\n var mileage = gen_location[7];\\r\\n if (location_accuracy !== 0) {\\r\\n var fix_state = 1;\\r\\n } else {\\r\\n var fix_state = 0;\\r\\n }\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n AddValue(codeValues, 'speed', speed);\\r\\n AddValue(codeValues, 'direction', direction);\\r\\n AddValue(codeValues, 'altitude', altitude);\\r\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\r\\n AddValue(codeValues, 'mileage', mileage);\\r\\n AddValue(codeValues, 'satellites', satellites);\\r\\n AddValue(codeValues, 'fix_state', fix_state);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\r\\n var variables = []; //Define array\\r\\n variables = params.lbs_data.split(',');\\r\\n var index = 2;\\r\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\r\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\r\\n AddValue(codeValues, 'mcc', variables[0]);\\r\\n AddValue(codeValues, 'mnc', variables[1]);\\r\\n AddValue(codeValues, 'lac', variables[index]);\\r\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\r\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\r\\n }\\r\\n index += 3;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\r\\n var bssid_array = params.wifi_data.split(',');\\r\\n var index = 0;\\r\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\r\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\r\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\r\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\r\\n }\\r\\n index += 2;\\r\\n }\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n // when Beacon is detected and it isn't flic BLE detected\\r\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\r\\n var gen_location = params.beacon_data.split(',');\\r\\n var latitude = gen_location[0];\\r\\n var longitude = gen_location[1];\\r\\n var mac = gen_location[2];\\r\\n var label = gen_location[3];\\r\\n AddValue(codeValues, 'latitude', latitude);\\r\\n AddValue(codeValues, 'longitude', longitude);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac) {\\r\\n AddValue(codeValues, 'beacon_mac', mac);\\r\\n var simpleQuery = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac,\\r\\n }];\\r\\n var simpleQueryLabel = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery\\r\\n };\\r\\n var labels = [];\\r\\n labels.push(JSON.stringify(simpleQueryLabel));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\r\\n var gen_location = params.ble_data.split(',');\\r\\n var flag = gen_location[0];\\r\\n var batLevel = gen_location[1];\\r\\n var mac2 = gen_location[2];\\r\\n //var label = gen_location[3];\\r\\n AddValue(codeValues, 'flagBLE', flag);\\r\\n AddValue(codeValues, 'batBLE', batLevel);\\r\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\r\\n // AddValue(codeValues,'beacon_mac', mac);\\r\\n //AddValue(codeValues,'beacon_major', 0);\\r\\n //AddValue(codeValues,'beacon_minor', 0);\\r\\n //<>,<>,<> \\r\\n if (mac2) {\\r\\n AddValue(codeValues, 'beacon_mac', mac2);\\r\\n var simpleQuery2 = [{\\r\\n 'code': 'Mac',\\r\\n 'value': mac2,\\r\\n }];\\r\\n var simpleQueryLabel2 = {\\r\\n 'table': 'beacons',\\r\\n 'select': 'Name',\\r\\n 'query': simpleQuery2\\r\\n };\\r\\n var labels2 = [];\\r\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\r\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\r\\n }\\r\\n if (params.beacon_major) {\\r\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_major', 0);\\r\\n }\\r\\n if (params.beacon_minor) {\\r\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\r\\n } else {\\r\\n AddValue(codeValues, 'beacon_minor', 0);\\r\\n }\\r\\n //AddValue(codeValues,'oysta_labels', label);\\r\\n //AddValue(codeValues,'oysta_value', mac);\\r\\n if (location_time) {\\r\\n AddValue(codeValues, 'location_time', location_time);\\r\\n }\\r\\n }\\r\\n /* meter mas tarde... \\r\\n if (params.smart_data !== 'undefined') {\\r\\n var gen_location = params.smart_data.split(',')\\r\\n var latitude = gen_location[0]\\r\\n var longitude = gen_location[1]\\r\\n var location_accuracy = gen_location[2]\\r\\n var altitude = gen_location[3]\\r\\n AddValue(codeValues,'latitude', latitude);\\r\\n AddValue(codeValues,'longitude', longitude);\\r\\n AddValue(codeValues,'altitude', altitude);\\r\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\r\\n }\\r\\n */\\r\\n /*else if ((params.event_time) && (params.event_time == '')) {\\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues,'event_time', event_time);\\r\\n } revisar mas adelante*/\\r\\n // to parse SMS info from the device\\r\\n switch (messageTypeLocalCode) {\\r\\n case 'COMM-SMS': // SMS message sent in\\r\\n if (params.data.startsWith('Device location request')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('IMEI:')) {\\r\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\r\\n } else if (params.data.startsWith('Set IP ok')) {\\r\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\r\\n } else if (params.data.startsWith('flush ok')) {\\r\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\r\\n } else if (params.data.startsWith('Set Roam-')) {\\r\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\r\\n } else if (params.data.startsWith('set live tracking')) {\\r\\n configsToAck.push(configIds.Controls.Trace);\\r\\n } else if (params.data.startsWith('reboot ok')) {\\r\\n configsToAck.push(configIds.Controls.Reboot);\\r\\n } else if (params.data.startsWith('GPS')) {\\r\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\r\\n var i1 = params.data.search('Now:')\\r\\n var i2 = params.data.search('Loc Time:')\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(i2 + 9, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\r\\n //var i1 = params.data.search('IMEI:')\\r\\n //var i2 = params.data.search('GSM signal quality:')\\r\\n var i3 = params.data.search('Software version:')\\r\\n var sub = params.data.substring(i3 + 17, params.data.length)\\r\\n var i4 = sub.search('version:');\\r\\n var fwVersion = sub.substring(i4, sub.length);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\r\\n var i1 = params.data.search('Fall alarm:');\\r\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\r\\n var i2 = params.data.search('level:');\\r\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\r\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\r\\n break;\\r\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\r\\n var i1 = raw.search('1,');\\r\\n //var i2 = params.data.search('2,');\\r\\n //var homeBeacon = params.data.substring(i1+2, i2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = raw.search('A1:');\\r\\n if (raw.includes('A2:')) {\\r\\n var i2 = raw.search('A2:');\\r\\n } else {\\r\\n var i2 = raw.search('A10:');\\r\\n }\\r\\n var tel = raw.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n i2 = raw.search('A10:')\\r\\n tel = raw.substring(i2 + 4, raw.length);\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n var i1 = params.data.search('APN:')\\r\\n var i2 = params.data.search('IP:')\\r\\n var i3 = params.data.search('Move')\\r\\n var apn = params.data.substring(i1 + 4, i2);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n var serverDetails = params.data.substring(i2 + 3, i3);\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\r\\n var i3 = params.data.search('Speed:')\\r\\n var i4 = params.data.search('Altitude:')\\r\\n var i5 = params.data.search('Battery:')\\r\\n var i6 = params.data.search('google')\\r\\n var eventTime = params.data.substring(0, i3)\\r\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\r\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\r\\n Speed = Speed * 0.44704\\r\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\r\\n Speed = Speed / 3.6\\r\\n }\\r\\n var latlong = params.data.substring(i6 + 18)\\r\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\r\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n }\\r\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\r\\n var event_time = moment.utc().unix();\\r\\n AddValue(codeValues, 'event_time', event_time);\\r\\n }\\r\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\r\\n // var location_time = moment.utc().unix();\\r\\n // AddValue(codeValues, 'location_time', location_time);\\r\\n //}\\r\\n }\\r\\n // send data msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n // end of main operation\\r\\n // define functions used in operation\\r\\n // decode global msg\\r\\n function decoder(str) { // decode rawdata\\r\\n // CARE Decoder\\r\\n AddValue(codeValues, 'Message : ', str);\\r\\n var message = str;\\r\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\r\\n var checksum = message.substring(8, 12);\\r\\n var messageBody = message.substring(16, message.length);\\r\\n debug('message =' + message);\\r\\n debug('checksum =' + checksum);\\r\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\r\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\r\\n debug(\\\"message has valid checksum\\\");\\r\\n var messageBody = command; // update value for the ACK\\r\\n debug('command =' + command);\\r\\n if (command == '01') {\\r\\n while (index < total_length + 16) {\\r\\n // gen_location = '0'; //cambiado 30/09\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n //Device ID\\r\\n case '01':\\r\\n var imei = hexToAscii(value);\\r\\n break;\\r\\n //Alarm code\\r\\n case '02':\\r\\n var alarm = 'CYC';\\r\\n var alarmCode = value.substring(0, 8);\\r\\n alarmCode = changeEndianness(alarmCode);\\r\\n var timestampHex = value.substring(8, 16);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n var alarmCodeInt = hexToDecimal(alarmCode);\\r\\n var alarmCodeExt = value.substring(16, 24);\\r\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\r\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\r\\n //Extended Alerts\\r\\n // Fall off\\r\\n if ((alarmCodeExtInt & 1) == 1) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // Welfare Check-out\\r\\n else if ((alarmCodeExtInt & 2) == 2) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Standard Alerts\\r\\n //Battery low\\r\\n else if ((alarmCodeInt & 1) == 1) {\\r\\n var alarm = 'BATL';\\r\\n }\\r\\n //Overspeed\\r\\n else if ((alarmCodeInt & 2) == 2) {\\r\\n var alarm = 'ALSP';\\r\\n }\\r\\n //Fall\\r\\n else if ((alarmCodeInt & 4) == 4) {\\r\\n var alarm = 'ALF';\\r\\n }\\r\\n //Tilt\\r\\n else if ((alarmCodeInt & 8) == 8) {\\r\\n var alarm = 'Tilt';\\r\\n } else if ((alarmCodeInt & 16) == 16) {\\r\\n if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n var alarm = 'Geo1-IN';\\r\\n } else {\\r\\n var alarm = 'Geo1-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 32) == 32) {\\r\\n if ((alarmCodeInt & 33554432) == 33554432) {\\r\\n var alarm = 'Geo2-IN';\\r\\n } else {\\r\\n var alarm = 'Geo2-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 64) == 64) {\\r\\n if ((alarmCodeInt & 67108864) == 67108864) {\\r\\n var alarm = 'Geo3-IN';\\r\\n } else {\\r\\n var alarm = 'Geo3-OUT';\\r\\n }\\r\\n } else if ((alarmCodeInt & 128) == 128) {\\r\\n if ((alarmCodeInt & 134217728) == 134217728) {\\r\\n var alarm = 'Geo4-IN';\\r\\n } else {\\r\\n var alarm = 'Geo4-OUT';\\r\\n }\\r\\n }\\r\\n //Power Off\\r\\n else if ((alarmCodeInt & 256) == 256) {\\r\\n var alarm = 'PWRF';\\r\\n }\\r\\n //Power On\\r\\n else if ((alarmCodeInt & 512) == 512) {\\r\\n var alarm = 'PWRN';\\r\\n }\\r\\n //Motion\\r\\n else if ((alarmCodeInt & 1024) == 1024) {\\r\\n var alarm = 'ALMOV';\\r\\n }\\r\\n //No Motion\\r\\n else if ((alarmCodeInt & 2048) == 2048) {\\r\\n var alarm = 'ALNM';\\r\\n }\\r\\n //SOS\\r\\n else if ((alarmCodeInt & 4096) == 4096) {\\r\\n var alarm = 'ALSOS';\\r\\n } else if ((alarmCodeInt & 8192) == 8192) {\\r\\n var alarm = 'Side1';\\r\\n } else if ((alarmCodeInt & 16384) == 16384) {\\r\\n var alarm = 'Side2';\\r\\n }\\r\\n //Battery charging\\r\\n else if ((alarmCodeInt & 32768) == 32768) {\\r\\n var alarm = 'BATCN';\\r\\n }\\r\\n //Battery no charging\\r\\n else if ((alarmCodeInt & 65536) == 65536) {\\r\\n var alarm = 'BATCF';\\r\\n }\\r\\n //SOS Ending\\r\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\r\\n else if ((alarmCodeInt & 131072) == 131072) {\\r\\n var alarm = 'SOSEnding';\\r\\n info = 'Alarm Finished';\\r\\n }\\r\\n //Amber Alert EC03 only\\r\\n else if ((alarmCodeInt & 262144) == 262144) {\\r\\n var alarm = 'ALAO';\\r\\n }\\r\\n // welfare Alert check-in ALA-O\\r\\n else if ((alarmCodeInt & 524288) == 524288) {\\r\\n var alarm = 'ALA-O';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n var alarm = 'ALA-C';\\r\\n }\\r\\n // Amber alert Ending ALA-C\\r\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\r\\n // var alarm = 'ALA-C';\\r\\n //}\\r\\n // Fall-Down Alert ending\\r\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\r\\n var alarm = 'ALF-C';\\r\\n }\\r\\n // welfare Alert Ending ALA\\r\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\r\\n var alarm = 'ALA';\\r\\n }\\r\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\r\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\r\\n // var alarm = 'BEA';\\r\\n //}\\r\\n general += 'alarm:' + alarm + ',';\\r\\n break;\\r\\n //Custom ID\\r\\n case '03':\\r\\n // in value is customID.... '06' for Watch Care\\r\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n // send error msg to kibana\\r\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\r\\n console.log(data);\\r\\n return data\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n //Historical Data Completed\\r\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\r\\n var histData = true;\\r\\n break;\\r\\n //GPS location\\r\\n case '20':\\r\\n location_type = 'GPS';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var speedHex = value.substring(16, 20);\\r\\n var directionHex = value.substring(20, 24);\\r\\n var altitudeHex = value.substring(24, 28);\\r\\n var location_accuracyHex = value.substring(28, 32);\\r\\n var mileageHex = value.substring(32, 40);\\r\\n var satellitesHex = value.substring(40, 42);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\r\\n var direction = hexToDecimal(changeEndianness(directionHex));\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n // Range: 0.5 to 99.9 \\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\r\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\r\\n var satellites = hexToDecimal(satellitesHex);\\r\\n // location_time = timestamp;\\r\\n //<>,<>,<>,<>,<>\\r\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\r\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //WIFI Towers\\r\\n case '22':\\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n wifi_data = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n wifi_data = wifi_data.slice(0, -1);\\r\\n general += wifi_data;\\r\\n break;\\r\\n //BLE Location Added 10/10/22\\r\\n case '23':\\r\\n location_type = 'BLE';\\r\\n var mac = value.substring(0, 12);\\r\\n var latitudeHex = value.substring(12, 20);\\r\\n var longitudeHex = value.substring(20, 28);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var address = hexToAscii(value.substring(28, value.length));\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n // location_time = timestamp;\\r\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\r\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //General Data , status_data\\r\\n case '24':\\r\\n //var general = 'true'\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n }\\r\\n //else {\\r\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\r\\n //}\\r\\n // reset variables\\r\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n location_time = timestamp;\\r\\n event_time = timestamp;\\r\\n // HardCode to fix possible issue in protocol\\r\\n //event_time = moment.utc().unix();\\r\\n // end of hard code\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n //params.BatteryStatus.BatteryStatus = '1';\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n // var alarm = 'BATCN';\\r\\n //configs.BatteryStatus.BatteryStatus = '1';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '1';\\r\\n var alarm = 'BATCN';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n //var alarm = 'BATF';\\r\\n // configs.BatteryStatus.BatteryStatus = '3';\\r\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\r\\n hasConfigs = true;\\r\\n var batteryStatus = '3';\\r\\n var alarm = 'BATF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }*/\\r\\n }\\r\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\r\\n statusDevice += 'Not Charging,';\\r\\n var alarm = 'BATCF';\\r\\n //configs.BatteryStatus.BatteryStatus = '2';\\r\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\r\\n var batteryStatus = '2';\\r\\n var alarm = 'BATCF';\\r\\n let configsToUpdate = [];\\r\\n configsToUpdate.push({\\r\\n 'code': configIds.BatteryStatus.BatteryStatus,\\r\\n 'value': batteryStatus\\r\\n });\\r\\n }\\r\\n }*/\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) { //isHome\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n if ((statusInt & 16384) == 16384) {\\r\\n statusDevice += 'HomeWiFi,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n status_data = statusDevice; //to oysta template\\r\\n //statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n general += 'statusDevice:' + statusDevice + ',';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ',';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ',';\\r\\n }\\r\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\r\\n break;\\r\\n //Call Records\\r\\n case '25':\\r\\n //Needed?\\r\\n break;\\r\\n //BLE Location 2\\r\\n case '26':\\r\\n //I don't understand\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Smart Location\\r\\n case '27':\\r\\n location_type = 'SMART';\\r\\n var latitudeHex = value.substring(0, 8);\\r\\n var longitudeHex = value.substring(8, 16);\\r\\n var location_accuracyHex = value.substring(16, 20);\\r\\n var altitudeHex = value.substring(20, 24);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\r\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\r\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\r\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\r\\n //location_time = timestamp;\\r\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\r\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\r\\n break;\\r\\n //Beacon Location Added 11/10/22\\r\\n case '28':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n descr = hexToAscii(value.substring(34, value.length));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n // var latitudeHex = value.substring(18, 26);\\r\\n // var longitudeHex = value.substring(26, 34);\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n // Beacon V2\\r\\n case '2C':\\r\\n location_type = 'BEACON';\\r\\n // var alarm = 'EBZI';\\r\\n var latitudeHex = '00';\\r\\n var longitudeHex = '00';\\r\\n var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 1));\\r\\n var beacId = hexToDecimal(value.substring(1, 2));\\r\\n // msg includes descrip\\r\\n if ((flag & 4) == 4) {\\r\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\r\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\r\\n //descr = hexToAscii(value.substring(18, value.length));\\r\\n }\\r\\n // msg includes lat/lon\\r\\n if ((flag & 8) == 8) {\\r\\n latitudeHex = value.substring(18, 26);\\r\\n longitudeHex = value.substring(26, 34);\\r\\n }\\r\\n // msg includes lat/lon and description\\r\\n if ((flag & 12) == 12) {\\r\\n latitudeHex = value.substring(20, 28);\\r\\n longitudeHex = value.substring(28, 36);\\r\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\r\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\r\\n }\\r\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var rssiHex = value.substring(14, 16);\\r\\n var rssi1Hex = value.substring(16, 18);\\r\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\r\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\r\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\r\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\r\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\r\\n //location_time = timestamp;\\r\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\r\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\r\\n break;\\r\\n //Cell Towers Note\\r\\n case '29':\\r\\n location_type = 'LBS';\\r\\n lbs_data = '';\\r\\n var mccHex = changeEndianness(value.substring(0, 4));\\r\\n var mncHex = value.substring(4, 6);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n lbs_data += mcc + ',';\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n lbs_data += mnc + ',';\\r\\n var indexLbs = 6;\\r\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\r\\n for (let i = 0; i < numTowers; i++) {\\r\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\r\\n var rxl = hexToDecimal(rxlHex);\\r\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\r\\n var lac = hexToDecimal(lacHex);\\r\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\r\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\r\\n indexLbs += 14;\\r\\n }\\r\\n lbs_data = lbs_data.slice(0, -1);\\r\\n general += lbs_data;\\r\\n break;\\r\\n case '30':\\r\\n //G-sensor. \\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numStep = (keyLength - 2) / 16;\\r\\n for (let j = 0; j < numStep; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var stepHex = value.substring(8, 16);\\r\\n stepHex = changeEndianness(stepHex);\\r\\n var stepRate = hexToDecimal(stepHex);\\r\\n info = stepRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'STP';\\r\\n general += ' step counting' + j + ':' + stepRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //Activity\\r\\n case '31':\\r\\n //I don't understand\\r\\n break;\\r\\n //BLE MAC list\\r\\n case '32':\\r\\n //I don't understand\\r\\n break;\\r\\n //Beacon List\\r\\n case '33':\\r\\n //I don't understand\\r\\n break;\\r\\n //Heart Rate Data\\r\\n case '40':\\r\\n if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }\\r\\n var numHeartRate = (keyLength - 2) / 12;\\r\\n for (let j = 0; j < numHeartRate; j++) {\\r\\n var timestampHex = value.substring(0, 8);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n //timestamp = hexToDecimalSigned(timestampHex);\\r\\n var heartRateHex = value.substring(8, 10);\\r\\n var heartRate = hexToDecimal(heartRateHex);\\r\\n var trustLevelHex = value.substring(10, 12);\\r\\n var trustLevel = hexToDecimal(trustLevelHex);\\r\\n info = heartRate;\\r\\n //var alarmCode = 'True';\\r\\n var alarm = 'HRT';\\r\\n general += ' heart rate' + j + ':' + heartRate + ',';\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n break;\\r\\n //BLE Connected . For Flic button\\r\\n case '62':\\r\\n location_type = 'BLE';\\r\\n //var alarm = 'EBZI'; \\r\\n //var latitudeHex = '00';\\r\\n //var longitudeHex = '00';\\r\\n //var descr = 'empty';\\r\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\r\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\r\\n // add : format in MAC\\r\\n mac = mac.match(/.{1,2}/g).join(':');\\r\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\r\\n //location_time = timestamp;\\r\\n ble_data = `${flag},${batLevel},${mac}`;\\r\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\r\\n break;\\r\\n }\\r\\n }\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n /*else if (alarm === 'HRT') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (alarm === 'STP') {\\r\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }*/\\r\\n // rest the alarm value\\r\\n alarm = '';\\r\\n }\\r\\n if (command == '02') {\\r\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n switch (key) {\\r\\n //Module Number\\r\\n case '01':\\r\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Firmware version\\r\\n case '02':\\r\\n //no ACK need\\r\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1A':\\r\\n //no ACK need\\r\\n var fwVersion = hexToAscii(value);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\r\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\r\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\r\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\r\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\r\\n break;\\r\\n //IMEI\\r\\n case '03':\\r\\n var imei = hexToDecimal(value);\\r\\n // harcode to avoid conflicts with Rio protocol\\r\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\r\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\r\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\r\\n // return\\r\\n //}\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //ICCID\\r\\n case '04':\\r\\n var iccid = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //BLE-MAC\\r\\n case '05':\\r\\n var bleMac = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n //Run Time\\r\\n case '07':\\r\\n var runTime = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '10': // Ringer Volume\\r\\n var volume = hexToDecimal(value);\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"Volume\\\", volume);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\r\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\r\\n break;\\r\\n case '0A': //Performance mode\\r\\n //var workMode = hexToDecimal(value);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n //var workMode = hexToDecimal(value);\\r\\n //var workMode = hexToAscii(value.substring(0, value.length));\\r\\n var workMode = 1234; // + value + \\\"end\\\";\\r\\n //var workModeVal = 9;\\r\\n //workMode = 'test10';\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\r\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\r\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n break;\\r\\n case '1B':\\r\\n //Decimal o ascii?\\r\\n var gsmModule = hexToDecimal(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '1F':\\r\\n //System Language\\r\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\r\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\r\\n break;\\r\\n case '33': // phone option\\r\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\r\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\r\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\r\\n var auto = 'true';\\r\\n } else var auto = 'false';\\r\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\r\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\r\\n allow = 'true';\\r\\n } else var allow = 'false';\\r\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\r\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\r\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\r\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\r\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\r\\n break;\\r\\n case '30': //ContactList\\r\\n var contactNumber = value.substring(1, 2);\\r\\n var telLength = hexToDecimal(value.substring(2, 4));\\r\\n var tel = '';\\r\\n switch (contactNumber) {\\r\\n // Emergency Number\\r\\n case '0':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\r\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\r\\n break;\\r\\n // Speed Dial Number\\r\\n case '1':\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\r\\n break;\\r\\n // Gateway Number\\r\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\r\\n tel = 'Esendex UK'\\r\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\r\\n tel = 'Esendex Spain'\\r\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\r\\n tel = 'Esendex UK Acceptance'\\r\\n } else {\\r\\n tel = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\r\\n break;\\r\\n default:\\r\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\r\\n if (tel.length < 6) {\\r\\n contacts += '';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\r\\n contacts += tel + ', ';\\r\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\r\\n break;\\r\\n }\\r\\n break;\\r\\n case '40': // APN\\r\\n //no ACK need\\r\\n var apn = hexToAscii(value.substring(0, value.length));\\r\\n imei = serverParams.Imei;\\r\\n break;\\r\\n case '41': // APN Username\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n break;\\r\\n case '42': // APN Password\\r\\n //no ACK need\\r\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"apn\\\", apn);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\r\\n break;\\r\\n case '43': //Server Details\\r\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\r\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\r\\n if (serverDetails.includes('52.232.85.255:5678')) {\\r\\n serverDetails = 'Production'\\r\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\r\\n serverDetails = 'Acceptance'\\r\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\r\\n serverDetails = 'Protocol-Import'\\r\\n } else {\\r\\n serverDetails = 'Default'\\r\\n }\\r\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\r\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\r\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\r\\n break;\\r\\n case '44': //time interval - work mode intervals\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\r\\n var workMode = 0;\\r\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\r\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\r\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\r\\n //workMode = 'High Frequency';\\r\\n workMode = 3;\\r\\n }\\r\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\r\\n //workMode = 'Balanced';\\r\\n workMode = 2;\\r\\n }\\r\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\r\\n //workMode = 'Power Saving';\\r\\n workMode = 1;\\r\\n }\\r\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\r\\n //workMode = 'No Reporting';\\r\\n workMode = 0;\\r\\n }\\r\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\r\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\r\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '47': // Custom Id\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"customeid\\\", value);\\r\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\r\\n configsToAck.push(configIds.ReadState.CustomId);\\r\\n break;\\r\\n case '53': // Non motion alert\\r\\n //2B020080\\r\\n var status = hexToBin(value.substring(6, 8));\\r\\n var alertSetting = '';\\r\\n var enableDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enableDisable = '1';\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n };\\r\\n //if (status.substring(5, 6) == '1') {\\r\\n // alertSetting += 'Dial, '\\r\\n //} else {\\r\\n // alertSetting += 'No Dial, '\\r\\n //};\\r\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\r\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n case '56': //Fall down sensibility\\r\\n // '00001100'\\r\\n var fallStatus = hexToBin(value.substring(0, 2));\\r\\n var enalbleDisable = '';\\r\\n //if (fallStatus.substring(4, 5) == '1') {\\r\\n if (fallStatus.substring(0, 1) == '1') {\\r\\n var sensibility = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n var sensibility = 'Disable, '\\r\\n };\\r\\n if (fallStatus.substring(5, 6) == '1') {\\r\\n sensibility += 'Dial, '\\r\\n } else {\\r\\n sensibility += 'No Dial, '\\r\\n };\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\r\\n sensibility += sesibityOptionValue;\\r\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\r\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\r\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\r\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\r\\n break;\\r\\n case '73': //BeaconList\\r\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\r\\n var beaconStatus = hexToBin(value.substring(0, 1));\\r\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\r\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\r\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\r\\n homeBeacon += beaconStatus + ', ';\\r\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\r\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\r\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\r\\n break;\\r\\n case '4A': //Wifi Network List\\r\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\r\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\r\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\r\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\r\\n var wifiStatus = value.substring(0, 1);\\r\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\r\\n /var homeWifi = '';\\r\\n if (wifiIndex == '0') { // Only first Wifi of the list\\r\\n if (wifiStatus == '8') {\\r\\n homeWifi += ' Enable, '\\r\\n enalbleDisable = '1';\\r\\n } else {\\r\\n homeWifi += ' Disable, '\\r\\n //enalbleDisable = '0';\\r\\n };*/\\r\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\r\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\r\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\r\\n var imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\r\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\r\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\r\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\r\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\r\\n }\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\r\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\r\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\r\\n break;\\r\\n case '21': // Speed Dial Settings\\r\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\r\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\r\\n var alertSetting = '';\\r\\n var enalbleDisable = '';\\r\\n if (status.substring(0, 1) == '1') {\\r\\n alertSetting = 'Enable, '\\r\\n enalbleDisable = '1'\\r\\n } else {\\r\\n alertSetting = 'Disable, '\\r\\n //enableDisable = '0';\\r\\n };\\r\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\r\\n //alertSetting += time;\\r\\n imei = serverParams.Imei;\\r\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\r\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\r\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\r\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\r\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\r\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\r\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '03') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n debug('key = ' + key);\\r\\n debug('value = ' + value);\\r\\n switch (key) {\\r\\n case '01': // Device ID\\r\\n var imei = hexToAscii(value);\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n break;\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /* case '03':\\r\\n //update customID to check if belongs to this type of device\\r\\n customID = value;\\r\\n if (value != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n } else {\\r\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\r\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\r\\n }\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n general += 'customID:' + value + ',';\\r\\n break;\\r\\n }\\r\\n break; */\\r\\n case '10': // Heartbeat\\r\\n var heartbeat = hexToAscii(value);\\r\\n event_time = moment.utc().unix();\\r\\n if (index < total_length + 16) {\\r\\n var keyLengthHex = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\r\\n key = message.substring(index, index = index + 2);\\r\\n if (key == '24') {\\r\\n // debug('key: ' + key) //comment those out\\r\\n value = message.substring(index, index = index + keyLength - 2);\\r\\n // debug(value)\\r\\n var timestampHex = value.substring(0, 8);\\r\\n // debug('timestampt hex: ' + timestampHex)\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n timestamp = hexToDecimal(timestampHex);\\r\\n event_time = timestamp;\\r\\n // debug(event_time)\\r\\n var statusHex = changeEndianness(value.substring(8, 16));\\r\\n // debug(statusHex)\\r\\n var statusInt = hexToDecimal(statusHex);\\r\\n var statusDevice = '';\\r\\n if ((statusInt & 1) == 1) {\\r\\n statusDevice += 'GPS,';\\r\\n }\\r\\n if ((statusInt & 2) == 2) {\\r\\n statusDevice += 'WIFISource,';\\r\\n }\\r\\n if ((statusInt & 4) == 4) {\\r\\n statusDevice += 'CellTower,';\\r\\n }\\r\\n if ((statusInt & 8) == 8) {\\r\\n statusDevice += 'BLELocation,';\\r\\n }\\r\\n if ((statusInt & 16) == 16) {\\r\\n statusDevice += 'Charging,';\\r\\n }\\r\\n if ((statusInt & 32) == 32) {\\r\\n statusDevice += 'FUllyCharged,';\\r\\n }\\r\\n if ((statusInt & 64) == 64) {\\r\\n statusDevice += 'Reboot,';\\r\\n }\\r\\n if ((statusInt & 128) == 128) {\\r\\n statusDevice += 'HistoricalData,';\\r\\n }\\r\\n if ((statusInt & 256) == 256) {\\r\\n statusDevice += 'AGPSDataValid,';\\r\\n }\\r\\n if ((statusInt & 512) == 512) {\\r\\n statusDevice += 'Motion,';\\r\\n }\\r\\n if ((statusInt & 1024) == 1024) {\\r\\n statusDevice += 'SmartLocating,';\\r\\n }\\r\\n if ((statusInt & 2048) == 2048) {\\r\\n statusDevice += 'BeaconLocation,';\\r\\n }\\r\\n if ((statusInt & 4096) == 4096) {\\r\\n statusDevice += 'BLEConnected,';\\r\\n }\\r\\n statusDevice = statusDevice.slice(0, -1);\\r\\n // debug('statusHex:' + statusHex)\\r\\n statusHex = (statusHex);\\r\\n statusHex = hexToBin(statusHex);\\r\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\r\\n // debug(statusHex)\\r\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\r\\n // debug(battery_percentage)\\r\\n // debug(battery_percentage)\\r\\n // debug(statusHex.substring(8, 13))\\r\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\r\\n // debug(cellNetworkSignal)\\r\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\r\\n // debug(workMode)\\r\\n general += 'statusDevice:' + statusDevice + ';';\\r\\n if (battery_percentage) {\\r\\n general += 'battery:' + battery_percentage + ';';\\r\\n }\\r\\n if (cellNetworkSignal) {\\r\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\r\\n }\\r\\n if (workMode) {\\r\\n general += 'workMode:' + workMode + ';';\\r\\n }\\r\\n }\\r\\n }\\r\\n // revisar\\r\\n var gen_location = '0';\\r\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\r\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n //messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '12': // Device requesting timestamp\\r\\n timestamp = moment.utc().unix();\\r\\n timestampHex = decimalToHex(timestamp);\\r\\n timestampHex = changeEndianness(timestampHex);\\r\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\r\\n // respond to device with the timestamp of the server\\r\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\r\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n break;\\r\\n case '21': //Cell Towers\\r\\n var mccHex = value.substring(0, 2);\\r\\n var mncHex = value.substring(2, 3);\\r\\n var mcc = hexToDecimal(mccHex);\\r\\n var mnc = hexToDecimal(mncHex);\\r\\n var numTowers = (keyLength - 4) / 5;\\r\\n var cellTowers = hexToAscii(value);\\r\\n messageBody = messageBody + keyLengthHex + key + value;\\r\\n break;\\r\\n case '22': // WIFI locations \\r\\n location_type = 'WIFI';\\r\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\r\\n //location_time = timestamp;\\r\\n var wifiTowers = value;\\r\\n general += 'wifiTowers:';\\r\\n var indexWifi = 0;\\r\\n var bssid_array = [];\\r\\n gen_location = '';\\r\\n for (let i = 0; i < numWifi; i++) {\\r\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\r\\n indexWifi += 14;\\r\\n }\\r\\n gen_location = gen_location.slice(0, -1);\\r\\n general += gen_location;\\r\\n //CustomID is not provided so far with command type 03\\r\\n /*if (customID != '04') {\\r\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\r\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n AddValue(codeValues, \\\"customID\\\", value);\\r\\n return\\r\\n }*/\\r\\n if (alarmCode) {\\r\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else if (statusDevice) {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n } else {\\r\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n }\\r\\n alarmCode = '';\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n if (command == '04') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7E') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n if (command == '7F') {\\r\\n // while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n imei = serverParams.Imei;\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\r\\n sendMessageToLocalhostNoWait(messageForReceiver);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\r\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\r\\n //}\\r\\n }\\r\\n if (command == 'FE') {\\r\\n while (index < total_length + 16) {\\r\\n var keyLength = message.substring(index, index = index + 2);\\r\\n keyLength = 2 * hexToDecimal(keyLength);\\r\\n var key = message.substring(index, index = index + 2);\\r\\n var value = message.substring(index, index = index + keyLength - 2);\\r\\n }\\r\\n }\\r\\n // prepare the ACK msg and change config if it is needed\\r\\n lengthAck = messageBody.length / 2;\\r\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\r\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\r\\n ////////////checksum CRC 16\\r\\n var checksumAck = byteStringToByteArray(messageBody);\\r\\n checksumAck = crc16byte(checksumAck);\\r\\n checksumAck = decimalToHex(checksumAck);\\r\\n checksumAck = ('0000' + checksumAck).slice(-4);\\r\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\r\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\r\\n // To send ACK to the device previous to internal msg with parts\\r\\n if (needsAck == true) {\\r\\n if (messageBody.length <= 2) {\\r\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\r\\n } else {\\r\\n ack = prefix + messageBody;\\r\\n }\\r\\n AddValue(codeValues, 'imei', imei);\\r\\n AddValue(codeValues, 'ack', ack);\\r\\n }\\r\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\r\\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\r\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\r\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\r\\n if (i >= 0) {\\r\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\r\\n AddValue(codeValues, \\\"imei\\\", imei);\\r\\n }\\r\\n }\\r\\n }\\r\\n // Auxiliary functions\\r\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\r\\n const dataToReceiver = {\\r\\n values: codeValues\\r\\n };\\r\\n if (configsToAck.length > 0) {\\r\\n dataToReceiver.configsToAck = configsToAck;\\r\\n }\\r\\n if (configsToUpdate.length > 0) {\\r\\n dataToReceiver.configsToUpdate = configsToUpdate;\\r\\n }\\r\\n if (configsToSend.length > 0) {\\r\\n dataToReceiver.configsToSend = configsToSend;\\r\\n }\\r\\n return dataToReceiver;\\r\\n }\\r\\n\\r\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n codeValueArray.push(cvpair);\\r\\n }\\r\\n // convert functions\\r\\n function asciiToHex(str) { // ascii to hex \\r\\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\r\\n }\\r\\n\\r\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\r\\n const bytes = [];\\r\\n for (let i = 0; i < str.length; i += 2) {\\r\\n const byte = parseInt(str.substring(i, i + 2), 16);\\r\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\r\\n bytes.push(byte);\\r\\n }\\r\\n }\\r\\n return bytes;\\r\\n }\\r\\n\\r\\n function decimalToHex(x) {\\r\\n return Number(x).toString(16).toUpperCase();\\r\\n }\\r\\n\\r\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\r\\n const bin = parseInt(hex, 16).toString(2);\\r\\n return bin.padStart(hex.length * 4, '0');\\r\\n }\\r\\n\\r\\n function hexToAscii(hex) {\\r\\n if (hex.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\r\\n }\\r\\n\\r\\n function hexToDecimalSigned(hex) { // hex to decimal\\r\\n if (hex.length % 2 !== 0) {\\r\\n hex = '0' + hex;\\r\\n }\\r\\n const num = parseInt(hex, 16);\\r\\n const bits = hex.length * 4;\\r\\n const maxVal = 2 ** bits;\\r\\n return num >= maxVal / 2 ? num - maxVal : num;\\r\\n }\\r\\n\\r\\n function hexToDecimal(hex) {\\r\\n return parseInt(hex, 16);\\r\\n }\\r\\n // CheckSum and debug functions\\r\\n function changeEndianness(hexString) { // changeEndianness\\r\\n if (hexString.length % 2 !== 0) {\\r\\n throw new Error(\\\"Hex string length must be even\\\");\\r\\n }\\r\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\r\\n .reverse() // invierte el orden\\r\\n .join('');\\r\\n }\\r\\n\\r\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\r\\n const bytes = byteStringToByteArray(payloadData);\\r\\n const crc = crc16byte(bytes);\\r\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\r\\n return changeEndianness(hex);\\r\\n }\\r\\n\\r\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\r\\n let crc = 0x0000;\\r\\n for (const byte of byteArray) {\\r\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\r\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\r\\n }\\r\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\r\\n crc = crcTable[index] ^ (crc << 8);\\r\\n }\\r\\n return crc & 0xFFFF;\\r\\n }\\r\\n\\r\\n function debug(...args) { // write debug info to console log, if localTesting\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG]', ...args);\\r\\n }\\r\\n }\\r\\n /*\\r\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\r\\n var server;\\r\\n if (localTesting) {\\r\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\r\\n console.log(str);\\r\\n server = '52.174.17.77';\\r\\n } else {\\r\\n server = '127.0.0.1';\\r\\n }\\r\\n var c = net.createConnection(5878, server);\\r\\n c.on('error', function(error) {\\r\\n c = net.createConnection(5878, server);\\r\\n });\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }*/\\r\\n function sendMessageToLocalhostNoWait(message) {\\r\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\r\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\r\\n const port = '5678'; //acceptance-dev\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Sending message to test server:', message);\\r\\n }\\r\\n const client = net.createConnection(port, server, () => {\\r\\n client.write(message);\\r\\n client.end();\\r\\n });\\r\\n client.on('error', (err) => {\\r\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\r\\n });\\r\\n client.on('end', () => {\\r\\n if (localTesting) {\\r\\n console.debug('[DEBUG] Connection closed');\\r\\n }\\r\\n });\\r\\n }\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742649962},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n ///////////////////////////////////////////////////////////////////////////////\\n //\\n // Roam protocol - please see variables and typical values in order below\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\n //\\n // Author: Juanmi Navarro\\n // Created: 01/01/0000\\n // Last modified: 22/03/2025\\n //\\n ///////////////////////////////////////////////////////////////////////////////\\n if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n }\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n ];\\n var codeValues = [];\\n AddValue(codeValues, 'protocol_template', 'Roam');\\n AddValue(codeValues, 'product', serverParams.ProductName);\\n var dataToReceiver = [];\\n var configsToAck = [];\\n var configsToUpdate = [];\\n var configsToSend = [];\\n if (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n AddValue(codeValues, 'rawMsg', raw);\\n //general SMS message\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n return;\\n }\\n AddValue(codeValues, 'raw', raw);\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\n var homeBeacon = '';\\n var homeWiFi = '';\\n var contacts = '';\\n var gps_data = '';\\n var wifi_data = '';\\n var status_data = '';\\n var lbs_data = '';\\n var beacon_data = '';\\n var ble_data = '';\\n var smart_data = '';\\n //parse header & properties\\n var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n var lengthLittleEndian = message.substring(4, 8);\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\n var messageForReceiver;\\n var sequenceID = message.substring(12, 16);\\n var command = message.substring(16, 18);\\n var index = 18;\\n var prefix = 'AB' + '00';\\n var lengthAck = 0;\\n var ack = '';\\n var needsAck = false;\\n var hasConfigs = false;\\n var general = '';\\n var timestamp = '';\\n var info = '';\\n var customID = '';\\n latitude = 0;\\n longitude = 0;\\n location_accuracy = 0; // GPS location adds the accuracy\\n location_time = event_time = '';\\n speed = 0.0;\\n var location_type = '0';\\n //var gen_location = '0'; \\n var i; // general loop counter\\n var battery_percentage = '';\\n var cellNetworkSignal = '';\\n var workMode = '';\\n //mask bitwise (properties should be '10')\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\n needsAck = true;\\n }\\n // Loop to decode multi-ACK msg\\n if (message.includes('AB00030008C7')) {\\n const multiack = message.split('AB00');\\n for (let i = 1; i < multiack.length; i++) {\\n message = 'AB00' + multiack[i];\\n debug(message);\\n decoder(message);\\n } // FOR multiACK\\n } else decoder(message); // IF multiACK\\n } else if (oystaTemplate == 'True') { // Oysta Template \\n AddValue(codeValues, 'rawMsg', raw);\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\n var gen_location = params.gps_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var location_accuracy = gen_location[2];\\n var speed = gen_location[3];\\n var direction = gen_location[4];\\n var altitude = gen_location[5];\\n var satellites = gen_location[6];\\n var mileage = gen_location[7];\\n if (location_accuracy !== 0) {\\n var fix_state = 1;\\n } else {\\n var fix_state = 0;\\n }\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n AddValue(codeValues, 'speed', speed);\\n AddValue(codeValues, 'direction', direction);\\n AddValue(codeValues, 'altitude', altitude);\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\n AddValue(codeValues, 'mileage', mileage);\\n AddValue(codeValues, 'satellites', satellites);\\n AddValue(codeValues, 'fix_state', fix_state);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\n var variables = []; //Define array\\n variables = params.lbs_data.split(',');\\n var index = 2;\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\n AddValue(codeValues, 'mcc', variables[0]);\\n AddValue(codeValues, 'mnc', variables[1]);\\n AddValue(codeValues, 'lac', variables[index]);\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\n }\\n index += 3;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\n var bssid_array = params.wifi_data.split(',');\\n var index = 0;\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\n }\\n index += 2;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n // when Beacon is detected and it isn't flic BLE detected\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\n var gen_location = params.beacon_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var mac = gen_location[2];\\n var label = gen_location[3];\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac) {\\n AddValue(codeValues, 'beacon_mac', mac);\\n var simpleQuery = [{\\n 'code': 'Mac',\\n 'value': mac,\\n }];\\n var simpleQueryLabel = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery\\n };\\n var labels = [];\\n labels.push(JSON.stringify(simpleQueryLabel));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\n var gen_location = params.ble_data.split(',');\\n var flag = gen_location[0];\\n var batLevel = gen_location[1];\\n var mac2 = gen_location[2];\\n //var label = gen_location[3];\\n AddValue(codeValues, 'flagBLE', flag);\\n AddValue(codeValues, 'batBLE', batLevel);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac2) {\\n AddValue(codeValues, 'beacon_mac', mac2);\\n var simpleQuery2 = [{\\n 'code': 'Mac',\\n 'value': mac2,\\n }];\\n var simpleQueryLabel2 = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery2\\n };\\n var labels2 = [];\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n /* meter mas tarde... \\n if (params.smart_data !== 'undefined') {\\n var gen_location = params.smart_data.split(',')\\n var latitude = gen_location[0]\\n var longitude = gen_location[1]\\n var location_accuracy = gen_location[2]\\n var altitude = gen_location[3]\\n AddValue(codeValues,'latitude', latitude);\\n AddValue(codeValues,'longitude', longitude);\\n AddValue(codeValues,'altitude', altitude);\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\n }\\n */\\n /*else if ((params.event_time) && (params.event_time == '')) {\\n var event_time = moment.utc().unix();\\n AddValue(codeValues,'event_time', event_time);\\n } revisar mas adelante*/\\n // to parse SMS info from the device\\n switch (messageTypeLocalCode) {\\n case 'COMM-SMS': // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\n } else if (params.data.startsWith('flush ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('Set Roam-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('set live tracking')) {\\n configsToAck.push(configIds.Controls.Trace);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.Controls.Reboot);\\n } else if (params.data.startsWith('GPS')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n var i1 = params.data.search('Now:')\\n var i2 = params.data.search('Loc Time:')\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(i2 + 9, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\n //var i1 = params.data.search('IMEI:')\\n //var i2 = params.data.search('GSM signal quality:')\\n var i3 = params.data.search('Software version:')\\n var sub = params.data.substring(i3 + 17, params.data.length)\\n var i4 = sub.search('version:');\\n var fwVersion = sub.substring(i4, sub.length);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\n var i1 = params.data.search('Fall alarm:');\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\n var i2 = params.data.search('level:');\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\n break;\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\n var i1 = raw.search('1,');\\n //var i2 = params.data.search('2,');\\n //var homeBeacon = params.data.substring(i1+2, i2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = raw.search('A1:');\\n if (raw.includes('A2:')) {\\n var i2 = raw.search('A2:');\\n } else {\\n var i2 = raw.search('A10:');\\n }\\n var tel = raw.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n i2 = raw.search('A10:')\\n tel = raw.substring(i2 + 4, raw.length);\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = params.data.search('APN:')\\n var i2 = params.data.search('IP:')\\n var i3 = params.data.search('Move')\\n var apn = params.data.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n var serverDetails = params.data.substring(i2 + 3, i3);\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(0, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n }\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\n var event_time = moment.utc().unix();\\n AddValue(codeValues, 'event_time', event_time);\\n }\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\n // var location_time = moment.utc().unix();\\n // AddValue(codeValues, 'location_time', location_time);\\n //}\\n }\\n // send data msg to kibana\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n console.log(data);\\n return data\\n // end of main operation\\n // define functions used in operation\\n // decode global msg\\n function decoder(str) { // decode rawdata\\n // CARE Decoder\\n AddValue(codeValues, 'Message : ', str);\\n var message = str;\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\n var checksum = message.substring(8, 12);\\n var messageBody = message.substring(16, message.length);\\n debug('message =' + message);\\n debug('checksum =' + checksum);\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\n debug(\\\"message has valid checksum\\\");\\n var messageBody = command; // update value for the ACK\\n debug('command =' + command);\\n if (command == '01') {\\n while (index < total_length + 16) {\\n // gen_location = '0'; //cambiado 30/09\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n //Device ID\\n case '01':\\n var imei = hexToAscii(value);\\n break;\\n //Alarm code\\n case '02':\\n var alarm = 'CYC';\\n var alarmCode = value.substring(0, 8);\\n alarmCode = changeEndianness(alarmCode);\\n var timestampHex = value.substring(8, 16);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n var alarmCodeInt = hexToDecimal(alarmCode);\\n var alarmCodeExt = value.substring(16, 24);\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\n //Extended Alerts\\n // Fall off\\n if ((alarmCodeExtInt & 1) == 1) {\\n var alarm = 'ALF-C';\\n }\\n // Welfare Check-out\\n else if ((alarmCodeExtInt & 2) == 2) {\\n var alarm = 'ALA-C';\\n }\\n // Standard Alerts\\n //Battery low\\n else if ((alarmCodeInt & 1) == 1) {\\n var alarm = 'BATL';\\n }\\n //Overspeed\\n else if ((alarmCodeInt & 2) == 2) {\\n var alarm = 'ALSP';\\n }\\n //Fall\\n else if ((alarmCodeInt & 4) == 4) {\\n var alarm = 'ALF';\\n }\\n //Tilt\\n else if ((alarmCodeInt & 8) == 8) {\\n var alarm = 'Tilt';\\n } else if ((alarmCodeInt & 16) == 16) {\\n if ((alarmCodeInt & 16777216) == 16777216) {\\n var alarm = 'Geo1-IN';\\n } else {\\n var alarm = 'Geo1-OUT';\\n }\\n } else if ((alarmCodeInt & 32) == 32) {\\n if ((alarmCodeInt & 33554432) == 33554432) {\\n var alarm = 'Geo2-IN';\\n } else {\\n var alarm = 'Geo2-OUT';\\n }\\n } else if ((alarmCodeInt & 64) == 64) {\\n if ((alarmCodeInt & 67108864) == 67108864) {\\n var alarm = 'Geo3-IN';\\n } else {\\n var alarm = 'Geo3-OUT';\\n }\\n } else if ((alarmCodeInt & 128) == 128) {\\n if ((alarmCodeInt & 134217728) == 134217728) {\\n var alarm = 'Geo4-IN';\\n } else {\\n var alarm = 'Geo4-OUT';\\n }\\n }\\n //Power Off\\n else if ((alarmCodeInt & 256) == 256) {\\n var alarm = 'PWRF';\\n }\\n //Power On\\n else if ((alarmCodeInt & 512) == 512) {\\n var alarm = 'PWRN';\\n }\\n //Motion\\n else if ((alarmCodeInt & 1024) == 1024) {\\n var alarm = 'ALMOV';\\n }\\n //No Motion\\n else if ((alarmCodeInt & 2048) == 2048) {\\n var alarm = 'ALNM';\\n }\\n //SOS\\n else if ((alarmCodeInt & 4096) == 4096) {\\n var alarm = 'ALSOS';\\n } else if ((alarmCodeInt & 8192) == 8192) {\\n var alarm = 'Side1';\\n } else if ((alarmCodeInt & 16384) == 16384) {\\n var alarm = 'Side2';\\n }\\n //Battery charging\\n else if ((alarmCodeInt & 32768) == 32768) {\\n var alarm = 'BATCN';\\n }\\n //Battery no charging\\n else if ((alarmCodeInt & 65536) == 65536) {\\n var alarm = 'BATCF';\\n }\\n //SOS Ending\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\n else if ((alarmCodeInt & 131072) == 131072) {\\n var alarm = 'SOSEnding';\\n info = 'Alarm Finished';\\n }\\n //Amber Alert EC03 only\\n else if ((alarmCodeInt & 262144) == 262144) {\\n var alarm = 'ALAO';\\n }\\n // welfare Alert check-in ALA-O\\n else if ((alarmCodeInt & 524288) == 524288) {\\n var alarm = 'ALA-O';\\n }\\n // Amber alert Ending ALA-C\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\n var alarm = 'ALA-C';\\n }\\n // Amber alert Ending ALA-C\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\n // var alarm = 'ALA-C';\\n //}\\n // Fall-Down Alert ending\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\n var alarm = 'ALF-C';\\n }\\n // welfare Alert Ending ALA\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\n var alarm = 'ALA';\\n }\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\n // var alarm = 'BEA';\\n //}\\n general += 'alarm:' + alarm + ',';\\n break;\\n //Custom ID\\n case '03':\\n // in value is customID.... '06' for Watch Care\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // exit decoder\\n // const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n // console.log(data);\\n return // data\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n //Historical Data Completed\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\n var histData = true;\\n break;\\n //GPS location\\n case '20':\\n location_type = 'GPS';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var speedHex = value.substring(16, 20);\\n var directionHex = value.substring(20, 24);\\n var altitudeHex = value.substring(24, 28);\\n var location_accuracyHex = value.substring(28, 32);\\n var mileageHex = value.substring(32, 40);\\n var satellitesHex = value.substring(40, 42);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\n var direction = hexToDecimal(changeEndianness(directionHex));\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n // Range: 0.5 to 99.9 \\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\n var satellites = hexToDecimal(satellitesHex);\\n // location_time = timestamp;\\n //<>,<>,<>,<>,<>\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //WIFI Towers\\n case '22':\\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n wifi_data = '';\\n for (let i = 0; i < numWifi; i++) {\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n wifi_data = wifi_data.slice(0, -1);\\n general += wifi_data;\\n break;\\n //BLE Location Added 10/10/22\\n case '23':\\n location_type = 'BLE';\\n var mac = value.substring(0, 12);\\n var latitudeHex = value.substring(12, 20);\\n var longitudeHex = value.substring(20, 28);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var address = hexToAscii(value.substring(28, value.length));\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n // location_time = timestamp;\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //General Data , status_data\\n case '24':\\n //var general = 'true'\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n }\\n //else {\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\n //}\\n // reset variables\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n location_time = timestamp;\\n event_time = timestamp;\\n // HardCode to fix possible issue in protocol\\n //event_time = moment.utc().unix();\\n // end of hard code\\n var statusHex = changeEndianness(value.substring(8, 16));\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n //params.BatteryStatus.BatteryStatus = '1';\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n // var alarm = 'BATCN';\\n //configs.BatteryStatus.BatteryStatus = '1';\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\n hasConfigs = true;\\n var batteryStatus = '1';\\n var alarm = 'BATCN';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n //var alarm = 'BATF';\\n // configs.BatteryStatus.BatteryStatus = '3';\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\n hasConfigs = true;\\n var batteryStatus = '3';\\n var alarm = 'BATF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\n statusDevice += 'Not Charging,';\\n var alarm = 'BATCF';\\n //configs.BatteryStatus.BatteryStatus = '2';\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\n var batteryStatus = '2';\\n var alarm = 'BATCF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }\\n }*/\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) { //isHome\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n if ((statusInt & 16384) == 16384) {\\n statusDevice += 'HomeWiFi,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n //statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n general += 'statusDevice:' + statusDevice + ',';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ',';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ',';\\n }\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\n break;\\n //Call Records\\n case '25':\\n //Needed?\\n break;\\n //BLE Location 2\\n case '26':\\n //I don't understand\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Smart Location\\n case '27':\\n location_type = 'SMART';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var location_accuracyHex = value.substring(16, 20);\\n var altitudeHex = value.substring(20, 24);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //location_time = timestamp;\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //Beacon Location Added 11/10/22\\n case '28':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n descr = hexToAscii(value.substring(34, value.length));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n // var latitudeHex = value.substring(18, 26);\\n // var longitudeHex = value.substring(26, 34);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\n break;\\n // Beacon V2\\n case '2C':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(20, 28);\\n longitudeHex = value.substring(28, 36);\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\n break;\\n //Cell Towers Note\\n case '29':\\n location_type = 'LBS';\\n lbs_data = '';\\n var mccHex = changeEndianness(value.substring(0, 4));\\n var mncHex = value.substring(4, 6);\\n var mcc = hexToDecimal(mccHex);\\n lbs_data += mcc + ',';\\n var mnc = hexToDecimal(mncHex);\\n lbs_data += mnc + ',';\\n var indexLbs = 6;\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\n for (let i = 0; i < numTowers; i++) {\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\n var rxl = hexToDecimal(rxlHex);\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\n var lac = hexToDecimal(lacHex);\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\n indexLbs += 14;\\n }\\n lbs_data = lbs_data.slice(0, -1);\\n general += lbs_data;\\n break;\\n case '30':\\n //G-sensor. \\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numStep = (keyLength - 2) / 16;\\n for (let j = 0; j < numStep; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var stepHex = value.substring(8, 16);\\n stepHex = changeEndianness(stepHex);\\n var stepRate = hexToDecimal(stepHex);\\n info = stepRate;\\n //var alarmCode = 'True';\\n var alarm = 'STP';\\n general += ' step counting' + j + ':' + stepRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //Activity\\n case '31':\\n //I don't understand\\n break;\\n //BLE MAC list\\n case '32':\\n //I don't understand\\n break;\\n //Beacon List\\n case '33':\\n //I don't understand\\n break;\\n //Heart Rate Data\\n case '40':\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numHeartRate = (keyLength - 2) / 12;\\n for (let j = 0; j < numHeartRate; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var heartRateHex = value.substring(8, 10);\\n var heartRate = hexToDecimal(heartRateHex);\\n var trustLevelHex = value.substring(10, 12);\\n var trustLevel = hexToDecimal(trustLevelHex);\\n info = heartRate;\\n //var alarmCode = 'True';\\n var alarm = 'HRT';\\n general += ' heart rate' + j + ':' + heartRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //BLE Connected . For Flic button\\n case '62':\\n location_type = 'BLE';\\n //var alarm = 'EBZI'; \\n //var latitudeHex = '00';\\n //var longitudeHex = '00';\\n //var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\n //location_time = timestamp;\\n ble_data = `${flag},${batLevel},${mac}`;\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\n break;\\n }\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n /*else if (alarm === 'HRT') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (alarm === 'STP') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }*/\\n // rest the alarm value\\n alarm = '';\\n }\\n if (command == '02') {\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n switch (key) {\\n //Module Number\\n case '01':\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Firmware version\\n case '02':\\n //no ACK need\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersion = hexToAscii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\n // harcode to avoid conflicts with Rio protocol\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\n // return\\n //}\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //ICCID\\n case '04':\\n var iccid = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //BLE-MAC\\n case '05':\\n var bleMac = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Run Time\\n case '07':\\n var runTime = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '10': // Ringer Volume\\n var volume = hexToDecimal(value);\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"Volume\\\", volume);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\n break;\\n case '0A': //Performance mode\\n //var workMode = hexToDecimal(value);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n //var workMode = hexToDecimal(value);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n var workMode = 1234; // + value + \\\"end\\\";\\n //var workModeVal = 9;\\n //workMode = 'test10';\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n break;\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1F':\\n //System Language\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n //messageBody = messageBody + keyLengthHex + key + value;\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\n break;\\n case '33': // phone option\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\n var auto = 'true';\\n } else var auto = 'false';\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\n allow = 'true';\\n } else var allow = 'false';\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\n break;\\n case '30': //ContactList\\n var contactNumber = value.substring(1, 2);\\n var telLength = hexToDecimal(value.substring(2, 4));\\n var tel = '';\\n switch (contactNumber) {\\n // Emergency Number\\n case '0':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n break;\\n // Speed Dial Number\\n case '1':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\n break;\\n // Gateway Number\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\n tel = 'Esendex UK'\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\n tel = 'Esendex Spain'\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\n tel = 'Esendex UK Acceptance'\\n } else {\\n tel = 'Default'\\n }\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n break;\\n default:\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.length < 6) {\\n contacts += '';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\n contacts += tel + ', ';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n break;\\n case '40': // APN\\n //no ACK need\\n var apn = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n break;\\n case '41': // APN Username\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n break;\\n case '42': // APN Password\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n break;\\n case '43': //Server Details\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\n if (serverDetails.includes('52.232.85.255:5678')) {\\n serverDetails = 'Production'\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\n serverDetails = 'Acceptance'\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\n serverDetails = 'Protocol-Import'\\n } else {\\n serverDetails = 'Default'\\n }\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n break;\\n case '44': //time interval - work mode intervals\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n var workMode = 0;\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\n //workMode = 'High Frequency';\\n workMode = 3;\\n }\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\n //workMode = 'Balanced';\\n workMode = 2;\\n }\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\n //workMode = 'Power Saving';\\n workMode = 1;\\n }\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\n //workMode = 'No Reporting';\\n workMode = 0;\\n }\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '47': // Custom Id\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"customeid\\\", value);\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\n configsToAck.push(configIds.ReadState.CustomId);\\n break;\\n case '53': // Non motion alert\\n //2B020080\\n var status = hexToBin(value.substring(6, 8));\\n var alertSetting = '';\\n var enableDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enableDisable = '1';\\n } else {\\n alertSetting = 'Disable, '\\n };\\n //if (status.substring(5, 6) == '1') {\\n // alertSetting += 'Dial, '\\n //} else {\\n // alertSetting += 'No Dial, '\\n //};\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n case '56': //Fall down sensibility\\n // '00001100'\\n var fallStatus = hexToBin(value.substring(0, 2));\\n var enalbleDisable = '';\\n //if (fallStatus.substring(4, 5) == '1') {\\n if (fallStatus.substring(0, 1) == '1') {\\n var sensibility = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n var sensibility = 'Disable, '\\n };\\n if (fallStatus.substring(5, 6) == '1') {\\n sensibility += 'Dial, '\\n } else {\\n sensibility += 'No Dial, '\\n };\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\n sensibility += sesibityOptionValue;\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\n break;\\n case '73': //BeaconList\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\n var beaconStatus = hexToBin(value.substring(0, 1));\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\n homeBeacon += beaconStatus + ', ';\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case '4A': //Wifi Network List\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\n var wifiStatus = value.substring(0, 1);\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\n /var homeWifi = '';\\n if (wifiIndex == '0') { // Only first Wifi of the list\\n if (wifiStatus == '8') {\\n homeWifi += ' Enable, '\\n enalbleDisable = '1';\\n } else {\\n homeWifi += ' Disable, '\\n //enalbleDisable = '0';\\n };*/\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n }\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\n break;\\n case '21': // Speed Dial Settings\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\n var alertSetting = '';\\n var enalbleDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n alertSetting = 'Disable, '\\n //enableDisable = '0';\\n };\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n //alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n }\\n }\\n }\\n if (command == '03') {\\n while (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n case '01': // Device ID\\n var imei = hexToAscii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n break;\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /* case '03':\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n break; */\\n case '10': // Heartbeat\\n var heartbeat = hexToAscii(value);\\n event_time = moment.utc().unix();\\n if (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\n key = message.substring(index, index = index + 2);\\n if (key == '24') {\\n // debug('key: ' + key) //comment those out\\n value = message.substring(index, index = index + keyLength - 2);\\n // debug(value)\\n var timestampHex = value.substring(0, 8);\\n // debug('timestampt hex: ' + timestampHex)\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n // debug(event_time)\\n var statusHex = changeEndianness(value.substring(8, 16));\\n // debug(statusHex)\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n }\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n // debug('statusHex:' + statusHex)\\n statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n // debug(statusHex)\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n // debug(battery_percentage)\\n // debug(battery_percentage)\\n // debug(statusHex.substring(8, 13))\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n // debug(cellNetworkSignal)\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n // debug(workMode)\\n general += 'statusDevice:' + statusDevice + ';';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ';';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ';';\\n }\\n }\\n }\\n // revisar\\n var gen_location = '0';\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '12': // Device requesting timestamp\\n timestamp = moment.utc().unix();\\n timestampHex = decimalToHex(timestamp);\\n timestampHex = changeEndianness(timestampHex);\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n // respond to device with the timestamp of the server\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '21': //Cell Towers\\n var mccHex = value.substring(0, 2);\\n var mncHex = value.substring(2, 3);\\n var mcc = hexToDecimal(mccHex);\\n var mnc = hexToDecimal(mncHex);\\n var numTowers = (keyLength - 4) / 5;\\n var cellTowers = hexToAscii(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '22': // WIFI locations \\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n gen_location = '';\\n for (let i = 0; i < numWifi; i++) {\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n gen_location = gen_location.slice(0, -1);\\n general += gen_location;\\n //CustomID is not provided so far with command type 03\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n alarmCode = '';\\n break;\\n }\\n }\\n }\\n if (command == '04') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7E') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7F') {\\n // while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\n //}\\n }\\n if (command == 'FE') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n // prepare the ACK msg and change config if it is needed\\n lengthAck = messageBody.length / 2;\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\n ////////////checksum CRC 16\\n var checksumAck = byteStringToByteArray(messageBody);\\n checksumAck = crc16byte(checksumAck);\\n checksumAck = decimalToHex(checksumAck);\\n checksumAck = ('0000' + checksumAck).slice(-4);\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\n // To send ACK to the device previous to internal msg with parts\\n if (needsAck == true) {\\n if (messageBody.length <= 2) {\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\n } else {\\n ack = prefix + messageBody;\\n }\\n AddValue(codeValues, 'imei', imei);\\n AddValue(codeValues, 'ack', ack);\\n }\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\n if (i >= 0) {\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n }\\n // Auxiliary functions\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\n const dataToReceiver = {\\n values: codeValues\\n };\\n if (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck;\\n }\\n if (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate;\\n }\\n if (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend;\\n }\\n return dataToReceiver;\\n }\\n\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n codeValueArray.push(cvpair);\\n }\\n // convert functions\\n function asciiToHex(str) { // ascii to hex \\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\n }\\n\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\n const bytes = [];\\n for (let i = 0; i < str.length; i += 2) {\\n const byte = parseInt(str.substring(i, i + 2), 16);\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\n bytes.push(byte);\\n }\\n }\\n return bytes;\\n }\\n\\n function decimalToHex(x) {\\n return Number(x).toString(16).toUpperCase();\\n }\\n\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\n const bin = parseInt(hex, 16).toString(2);\\n return bin.padStart(hex.length * 4, '0');\\n }\\n\\n function hexToAscii(hex) {\\n if (hex.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\n }\\n\\n function hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 !== 0) {\\n hex = '0' + hex;\\n }\\n const num = parseInt(hex, 16);\\n const bits = hex.length * 4;\\n const maxVal = 2 ** bits;\\n return num >= maxVal / 2 ? num - maxVal : num;\\n }\\n\\n function hexToDecimal(hex) {\\n return parseInt(hex, 16);\\n }\\n // CheckSum and debug functions\\n function changeEndianness(hexString) { // changeEndianness\\n if (hexString.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\n .reverse() // invierte el orden\\n .join('');\\n }\\n\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\n const bytes = byteStringToByteArray(payloadData);\\n const crc = crc16byte(bytes);\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\n return changeEndianness(hex);\\n }\\n\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\n let crc = 0x0000;\\n for (const byte of byteArray) {\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\n }\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[index] ^ (crc << 8);\\n }\\n return crc & 0xFFFF;\\n }\\n\\n function debug(...args) { // write debug info to console log, if localTesting\\n if (localTesting) {\\n console.debug('[DEBUG]', ...args);\\n }\\n }\\n /*\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting) {\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5878, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5878, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n }*/\\n function sendMessageToLocalhostNoWait(message) {\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\n const port = '5678'; //acceptance-dev\\n if (localTesting) {\\n console.debug('[DEBUG] Sending message to test server:', message);\\n }\\n const client = net.createConnection(port, server, () => {\\n client.write(message);\\n client.end();\\n });\\n client.on('error', (err) => {\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\n });\\n client.on('end', () => {\\n if (localTesting) {\\n console.debug('[DEBUG] Connection closed');\\n }\\n });\\n }\\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, net, 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":1744112746},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n ///////////////////////////////////////////////////////////////////////////////\\n //\\n // Roam protocol - please see variables and typical values in order below\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\n //\\n // Author: Juanmi Navarro\\n // Created: 01/01/0000\\n // Last modified: 22/03/2025\\n //\\n ///////////////////////////////////////////////////////////////////////////////\\n if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n }\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n ];\\n var codeValues = [];\\n AddValue(codeValues, 'protocol_template', 'Roam');\\n AddValue(codeValues, 'product', serverParams.ProductName);\\n var dataToReceiver = [];\\n var configsToAck = [];\\n var configsToUpdate = [];\\n var configsToSend = [];\\n if (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n AddValue(codeValues, 'rawMsg', raw);\\n //general SMS message\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n return;\\n }\\n AddValue(codeValues, 'raw', raw);\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\n var homeBeacon = '';\\n var homeWiFi = '';\\n var contacts = '';\\n var gps_data = '';\\n var wifi_data = '';\\n var status_data = '';\\n var lbs_data = '';\\n var beacon_data = '';\\n var ble_data = '';\\n var smart_data = '';\\n //parse header & properties\\n var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n var lengthLittleEndian = message.substring(4, 8);\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\n var messageForReceiver;\\n var sequenceID = message.substring(12, 16);\\n var command = message.substring(16, 18);\\n var index = 18;\\n var prefix = 'AB' + '00';\\n var lengthAck = 0;\\n var ack = '';\\n var needsAck = false;\\n var hasConfigs = false;\\n var general = '';\\n var timestamp = '';\\n var info = '';\\n var customID = '';\\n latitude = 0;\\n longitude = 0;\\n location_accuracy = 0; // GPS location adds the accuracy\\n location_time = event_time = '';\\n speed = 0.0;\\n var location_type = '0';\\n //var gen_location = '0'; \\n var i; // general loop counter\\n var battery_percentage = '';\\n var cellNetworkSignal = '';\\n var workMode = '';\\n //mask bitwise (properties should be '10')\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\n needsAck = true;\\n }\\n // Loop to decode multi-ACK msg\\n if (message.includes('AB00030008C7')) {\\n const multiack = message.split('AB00');\\n for (let i = 1; i < multiack.length; i++) {\\n message = 'AB00' + multiack[i];\\n debug(message);\\n decoder(message);\\n } // FOR multiACK\\n } else decoder(message); // IF multiACK\\n } else if (oystaTemplate == 'True') { // Oysta Template \\n AddValue(codeValues, 'rawMsg', raw);\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\n var gen_location = params.gps_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var location_accuracy = gen_location[2];\\n var speed = gen_location[3];\\n var direction = gen_location[4];\\n var altitude = gen_location[5];\\n var satellites = gen_location[6];\\n var mileage = gen_location[7];\\n if (location_accuracy !== 0) {\\n var fix_state = 1;\\n } else {\\n var fix_state = 0;\\n }\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n AddValue(codeValues, 'speed', speed);\\n AddValue(codeValues, 'direction', direction);\\n AddValue(codeValues, 'altitude', altitude);\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\n AddValue(codeValues, 'mileage', mileage);\\n AddValue(codeValues, 'satellites', satellites);\\n AddValue(codeValues, 'fix_state', fix_state);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\n var variables = []; //Define array\\n variables = params.lbs_data.split(',');\\n var index = 2;\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\n AddValue(codeValues, 'mcc', variables[0]);\\n AddValue(codeValues, 'mnc', variables[1]);\\n AddValue(codeValues, 'lac', variables[index]);\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\n }\\n index += 3;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\n var bssid_array = params.wifi_data.split(',');\\n var index = 0;\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\n }\\n index += 2;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n // when Beacon is detected and it isn't flic BLE detected\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\n var gen_location = params.beacon_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var mac = gen_location[2];\\n var label = gen_location[3];\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac) {\\n AddValue(codeValues, 'beacon_mac', mac);\\n var simpleQuery = [{\\n 'code': 'Mac',\\n 'value': mac,\\n }];\\n var simpleQueryLabel = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery\\n };\\n var labels = [];\\n labels.push(JSON.stringify(simpleQueryLabel));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\n var gen_location = params.ble_data.split(',');\\n var flag = gen_location[0];\\n var batLevel = gen_location[1];\\n var mac2 = gen_location[2];\\n //var label = gen_location[3];\\n AddValue(codeValues, 'flagBLE', flag);\\n AddValue(codeValues, 'batBLE', batLevel);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac2) {\\n AddValue(codeValues, 'beacon_mac', mac2);\\n var simpleQuery2 = [{\\n 'code': 'Mac',\\n 'value': mac2,\\n }];\\n var simpleQueryLabel2 = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery2\\n };\\n var labels2 = [];\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n /* meter mas tarde... \\n if (params.smart_data !== 'undefined') {\\n var gen_location = params.smart_data.split(',')\\n var latitude = gen_location[0]\\n var longitude = gen_location[1]\\n var location_accuracy = gen_location[2]\\n var altitude = gen_location[3]\\n AddValue(codeValues,'latitude', latitude);\\n AddValue(codeValues,'longitude', longitude);\\n AddValue(codeValues,'altitude', altitude);\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\n }\\n */\\n /*else if ((params.event_time) && (params.event_time == '')) {\\n var event_time = moment.utc().unix();\\n AddValue(codeValues,'event_time', event_time);\\n } revisar mas adelante*/\\n // to parse SMS info from the device\\n switch (messageTypeLocalCode) {\\n case 'COMM-SMS': // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\n } else if (params.data.startsWith('flush ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('Set Roam-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('set live tracking')) {\\n configsToAck.push(configIds.Controls.Trace);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.Controls.Reboot);\\n } else if (params.data.startsWith('GPS')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n var i1 = params.data.search('Now:')\\n var i2 = params.data.search('Loc Time:')\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(i2 + 9, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\n //var i1 = params.data.search('IMEI:')\\n //var i2 = params.data.search('GSM signal quality:')\\n var i3 = params.data.search('Software version:')\\n var sub = params.data.substring(i3 + 17, params.data.length)\\n var i4 = sub.search('version:');\\n var fwVersion = sub.substring(i4, sub.length);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\n var i1 = params.data.search('Fall alarm:');\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\n var i2 = params.data.search('level:');\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\n break;\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\n var i1 = raw.search('1,');\\n //var i2 = params.data.search('2,');\\n //var homeBeacon = params.data.substring(i1+2, i2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = raw.search('A1:');\\n if (raw.includes('A2:')) {\\n var i2 = raw.search('A2:');\\n } else {\\n var i2 = raw.search('A10:');\\n }\\n var tel = raw.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n i2 = raw.search('A10:')\\n tel = raw.substring(i2 + 4, raw.length);\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = params.data.search('APN:')\\n var i2 = params.data.search('IP:')\\n var i3 = params.data.search('Move')\\n var apn = params.data.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n var serverDetails = params.data.substring(i2 + 3, i3);\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(0, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n }\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\n var event_time = moment.utc().unix();\\n AddValue(codeValues, 'event_time', event_time);\\n }\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\n // var location_time = moment.utc().unix();\\n // AddValue(codeValues, 'location_time', location_time);\\n //}\\n }\\n // send data msg to kibana\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n console.log(data);\\n return data\\n // end of main operation\\n // define functions used in operation\\n // decode global msg\\n function decoder(str) { // decode rawdata\\n // CARE Decoder\\n AddValue(codeValues, 'Message : ', str);\\n var message = str;\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\n var checksum = message.substring(8, 12);\\n var messageBody = message.substring(16, message.length);\\n debug('message =' + message);\\n debug('checksum =' + checksum);\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\n debug(\\\"message has valid checksum\\\");\\n var messageBody = command; // update value for the ACK\\n debug('command =' + command);\\n if (command == '01') {\\n while (index < total_length + 16) {\\n // gen_location = '0'; //cambiado 30/09\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n //Device ID\\n case '01':\\n var imei = hexToAscii(value);\\n break;\\n //Alarm code\\n case '02':\\n var alarm = 'CYC';\\n var alarmCode = value.substring(0, 8);\\n alarmCode = changeEndianness(alarmCode);\\n var timestampHex = value.substring(8, 16);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n var alarmCodeInt = hexToDecimal(alarmCode);\\n var alarmCodeExt = value.substring(16, 24);\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\n //Extended Alerts\\n // Fall off\\n if ((alarmCodeExtInt & 1) == 1) {\\n var alarm = 'ALF-C';\\n }\\n // Welfare Check-out\\n else if ((alarmCodeExtInt & 2) == 2) {\\n var alarm = 'ALA-C';\\n }\\n // Standard Alerts\\n //Battery low\\n else if ((alarmCodeInt & 1) == 1) {\\n var alarm = 'BATL';\\n }\\n //Overspeed\\n else if ((alarmCodeInt & 2) == 2) {\\n var alarm = 'ALSP';\\n }\\n //Fall\\n else if ((alarmCodeInt & 4) == 4) {\\n var alarm = 'ALF';\\n }\\n //Tilt\\n else if ((alarmCodeInt & 8) == 8) {\\n var alarm = 'Tilt';\\n } else if ((alarmCodeInt & 16) == 16) {\\n if ((alarmCodeInt & 16777216) == 16777216) {\\n var alarm = 'Geo1-IN';\\n } else {\\n var alarm = 'Geo1-OUT';\\n }\\n } else if ((alarmCodeInt & 32) == 32) {\\n if ((alarmCodeInt & 33554432) == 33554432) {\\n var alarm = 'Geo2-IN';\\n } else {\\n var alarm = 'Geo2-OUT';\\n }\\n } else if ((alarmCodeInt & 64) == 64) {\\n if ((alarmCodeInt & 67108864) == 67108864) {\\n var alarm = 'Geo3-IN';\\n } else {\\n var alarm = 'Geo3-OUT';\\n }\\n } else if ((alarmCodeInt & 128) == 128) {\\n if ((alarmCodeInt & 134217728) == 134217728) {\\n var alarm = 'Geo4-IN';\\n } else {\\n var alarm = 'Geo4-OUT';\\n }\\n }\\n //Power Off\\n else if ((alarmCodeInt & 256) == 256) {\\n var alarm = 'PWRF';\\n }\\n //Power On\\n else if ((alarmCodeInt & 512) == 512) {\\n var alarm = 'PWRN';\\n }\\n //Motion\\n else if ((alarmCodeInt & 1024) == 1024) {\\n var alarm = 'ALMOV';\\n }\\n //No Motion\\n else if ((alarmCodeInt & 2048) == 2048) {\\n var alarm = 'ALNM';\\n }\\n //SOS\\n else if ((alarmCodeInt & 4096) == 4096) {\\n var alarm = 'ALSOS';\\n } else if ((alarmCodeInt & 8192) == 8192) {\\n var alarm = 'Side1';\\n } else if ((alarmCodeInt & 16384) == 16384) {\\n var alarm = 'Side2';\\n }\\n //Battery charging\\n else if ((alarmCodeInt & 32768) == 32768) {\\n var alarm = 'BATCN';\\n }\\n //Battery no charging\\n else if ((alarmCodeInt & 65536) == 65536) {\\n var alarm = 'BATCF';\\n }\\n //SOS Ending\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\n else if ((alarmCodeInt & 131072) == 131072) {\\n var alarm = 'SOSEnding';\\n info = 'Alarm Finished';\\n }\\n //Amber Alert EC03 only\\n else if ((alarmCodeInt & 262144) == 262144) {\\n var alarm = 'ALAO';\\n }\\n // welfare Alert check-in ALA-O\\n else if ((alarmCodeInt & 524288) == 524288) {\\n var alarm = 'ALA-O';\\n }\\n // Amber alert Ending ALA-C\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\n var alarm = 'ALA-C';\\n }\\n // Amber alert Ending ALA-C\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\n // var alarm = 'ALA-C';\\n //}\\n // Fall-Down Alert ending\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\n var alarm = 'ALF-C';\\n }\\n // welfare Alert Ending ALA\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\n var alarm = 'ALA';\\n }\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\n // var alarm = 'BEA';\\n //}\\n general += 'alarm:' + alarm + ',';\\n break;\\n //Custom ID\\n case '03':\\n // in value is customID.... '06' for Watch Care\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // exit decoder\\n // const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n // console.log(data);\\n return // data\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n return;\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n //Historical Data Completed\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\n var histData = true;\\n break;\\n //GPS location\\n case '20':\\n location_type = 'GPS';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var speedHex = value.substring(16, 20);\\n var directionHex = value.substring(20, 24);\\n var altitudeHex = value.substring(24, 28);\\n var location_accuracyHex = value.substring(28, 32);\\n var mileageHex = value.substring(32, 40);\\n var satellitesHex = value.substring(40, 42);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\n var direction = hexToDecimal(changeEndianness(directionHex));\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n // Range: 0.5 to 99.9 \\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\n var satellites = hexToDecimal(satellitesHex);\\n // location_time = timestamp;\\n //<>,<>,<>,<>,<>\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //WIFI Towers\\n case '22':\\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n wifi_data = '';\\n for (let i = 0; i < numWifi; i++) {\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n wifi_data = wifi_data.slice(0, -1);\\n general += wifi_data;\\n break;\\n //BLE Location Added 10/10/22\\n case '23':\\n location_type = 'BLE';\\n var mac = value.substring(0, 12);\\n var latitudeHex = value.substring(12, 20);\\n var longitudeHex = value.substring(20, 28);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var address = hexToAscii(value.substring(28, value.length));\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n // location_time = timestamp;\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //General Data , status_data\\n case '24':\\n //var general = 'true'\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n }\\n //else {\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\n //}\\n // reset variables\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n location_time = timestamp;\\n event_time = timestamp;\\n // HardCode to fix possible issue in protocol\\n //event_time = moment.utc().unix();\\n // end of hard code\\n var statusHex = changeEndianness(value.substring(8, 16));\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n //params.BatteryStatus.BatteryStatus = '1';\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n // var alarm = 'BATCN';\\n //configs.BatteryStatus.BatteryStatus = '1';\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\n hasConfigs = true;\\n var batteryStatus = '1';\\n var alarm = 'BATCN';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n //var alarm = 'BATF';\\n // configs.BatteryStatus.BatteryStatus = '3';\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\n hasConfigs = true;\\n var batteryStatus = '3';\\n var alarm = 'BATF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\n statusDevice += 'Not Charging,';\\n var alarm = 'BATCF';\\n //configs.BatteryStatus.BatteryStatus = '2';\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\n var batteryStatus = '2';\\n var alarm = 'BATCF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }\\n }*/\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) { //isHome\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n if ((statusInt & 16384) == 16384) {\\n statusDevice += 'HomeWiFi,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n //statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n general += 'statusDevice:' + statusDevice + ',';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ',';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ',';\\n }\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\n break;\\n //Call Records\\n case '25':\\n //Needed?\\n break;\\n //BLE Location 2\\n case '26':\\n //I don't understand\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Smart Location\\n case '27':\\n location_type = 'SMART';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var location_accuracyHex = value.substring(16, 20);\\n var altitudeHex = value.substring(20, 24);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //location_time = timestamp;\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //Beacon Location Added 11/10/22\\n case '28':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n descr = hexToAscii(value.substring(34, value.length));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n // var latitudeHex = value.substring(18, 26);\\n // var longitudeHex = value.substring(26, 34);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\n break;\\n // Beacon V2\\n case '2C':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(20, 28);\\n longitudeHex = value.substring(28, 36);\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\n break;\\n //Cell Towers Note\\n case '29':\\n location_type = 'LBS';\\n lbs_data = '';\\n var mccHex = changeEndianness(value.substring(0, 4));\\n var mncHex = value.substring(4, 6);\\n var mcc = hexToDecimal(mccHex);\\n lbs_data += mcc + ',';\\n var mnc = hexToDecimal(mncHex);\\n lbs_data += mnc + ',';\\n var indexLbs = 6;\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\n for (let i = 0; i < numTowers; i++) {\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\n var rxl = hexToDecimal(rxlHex);\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\n var lac = hexToDecimal(lacHex);\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\n indexLbs += 14;\\n }\\n lbs_data = lbs_data.slice(0, -1);\\n general += lbs_data;\\n break;\\n case '30':\\n //G-sensor. \\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numStep = (keyLength - 2) / 16;\\n for (let j = 0; j < numStep; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var stepHex = value.substring(8, 16);\\n stepHex = changeEndianness(stepHex);\\n var stepRate = hexToDecimal(stepHex);\\n info = stepRate;\\n //var alarmCode = 'True';\\n var alarm = 'STP';\\n general += ' step counting' + j + ':' + stepRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //Activity\\n case '31':\\n //I don't understand\\n break;\\n //BLE MAC list\\n case '32':\\n //I don't understand\\n break;\\n //Beacon List\\n case '33':\\n //I don't understand\\n break;\\n //Heart Rate Data\\n case '40':\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numHeartRate = (keyLength - 2) / 12;\\n for (let j = 0; j < numHeartRate; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var heartRateHex = value.substring(8, 10);\\n var heartRate = hexToDecimal(heartRateHex);\\n var trustLevelHex = value.substring(10, 12);\\n var trustLevel = hexToDecimal(trustLevelHex);\\n info = heartRate;\\n //var alarmCode = 'True';\\n var alarm = 'HRT';\\n general += ' heart rate' + j + ':' + heartRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //BLE Connected . For Flic button\\n case '62':\\n location_type = 'BLE';\\n //var alarm = 'EBZI'; \\n //var latitudeHex = '00';\\n //var longitudeHex = '00';\\n //var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\n //location_time = timestamp;\\n ble_data = `${flag},${batLevel},${mac}`;\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\n break;\\n }\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n /*else if (alarm === 'HRT') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (alarm === 'STP') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }*/\\n // rest the alarm value\\n alarm = '';\\n }\\n if (command == '02') {\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n switch (key) {\\n //Module Number\\n case '01':\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Firmware version\\n case '02':\\n //no ACK need\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersion = hexToAscii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\n // harcode to avoid conflicts with Rio protocol\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\n // return\\n //}\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n return;\\n }\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //ICCID\\n case '04':\\n var iccid = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //BLE-MAC\\n case '05':\\n var bleMac = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Run Time\\n case '07':\\n var runTime = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '10': // Ringer Volume\\n var volume = hexToDecimal(value);\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"Volume\\\", volume);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\n break;\\n case '0A': //Performance mode\\n //var workMode = hexToDecimal(value);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n //var workMode = hexToDecimal(value);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n var workMode = 1234; // + value + \\\"end\\\";\\n //var workModeVal = 9;\\n //workMode = 'test10';\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n break;\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1F':\\n //System Language\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n //messageBody = messageBody + keyLengthHex + key + value;\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\n break;\\n case '33': // phone option\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\n var auto = 'true';\\n } else var auto = 'false';\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\n allow = 'true';\\n } else var allow = 'false';\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\n break;\\n case '30': //ContactList\\n var contactNumber = value.substring(1, 2);\\n var telLength = hexToDecimal(value.substring(2, 4));\\n var tel = '';\\n switch (contactNumber) {\\n // Emergency Number\\n case '0':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n break;\\n // Speed Dial Number\\n case '1':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\n break;\\n // Gateway Number\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\n tel = 'Esendex UK'\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\n tel = 'Esendex Spain'\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\n tel = 'Esendex UK Acceptance'\\n } else {\\n tel = 'Default'\\n }\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n break;\\n default:\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.length < 6) {\\n contacts += '';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\n contacts += tel + ', ';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n break;\\n case '40': // APN\\n //no ACK need\\n var apn = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n break;\\n case '41': // APN Username\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n break;\\n case '42': // APN Password\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n break;\\n case '43': //Server Details\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\n if (serverDetails.includes('52.232.85.255:5678')) {\\n serverDetails = 'Production'\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\n serverDetails = 'Acceptance'\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\n serverDetails = 'Protocol-Import'\\n } else {\\n serverDetails = 'Default'\\n }\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n break;\\n case '44': //time interval - work mode intervals\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n var workMode = 0;\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\n //workMode = 'High Frequency';\\n workMode = 3;\\n }\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\n //workMode = 'Balanced';\\n workMode = 2;\\n }\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\n //workMode = 'Power Saving';\\n workMode = 1;\\n }\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\n //workMode = 'No Reporting';\\n workMode = 0;\\n }\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '47': // Custom Id\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"customeid\\\", value);\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\n configsToAck.push(configIds.ReadState.CustomId);\\n break;\\n case '53': // Non motion alert\\n //2B020080\\n var status = hexToBin(value.substring(6, 8));\\n var alertSetting = '';\\n var enableDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enableDisable = '1';\\n } else {\\n alertSetting = 'Disable, '\\n };\\n //if (status.substring(5, 6) == '1') {\\n // alertSetting += 'Dial, '\\n //} else {\\n // alertSetting += 'No Dial, '\\n //};\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n case '56': //Fall down sensibility\\n // '00001100'\\n var fallStatus = hexToBin(value.substring(0, 2));\\n var enalbleDisable = '';\\n //if (fallStatus.substring(4, 5) == '1') {\\n if (fallStatus.substring(0, 1) == '1') {\\n var sensibility = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n var sensibility = 'Disable, '\\n };\\n if (fallStatus.substring(5, 6) == '1') {\\n sensibility += 'Dial, '\\n } else {\\n sensibility += 'No Dial, '\\n };\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\n sensibility += sesibityOptionValue;\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\n break;\\n case '73': //BeaconList\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\n var beaconStatus = hexToBin(value.substring(0, 1));\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\n homeBeacon += beaconStatus + ', ';\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case '4A': //Wifi Network List\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\n var wifiStatus = value.substring(0, 1);\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\n /var homeWifi = '';\\n if (wifiIndex == '0') { // Only first Wifi of the list\\n if (wifiStatus == '8') {\\n homeWifi += ' Enable, '\\n enalbleDisable = '1';\\n } else {\\n homeWifi += ' Disable, '\\n //enalbleDisable = '0';\\n };*/\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n }\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\n break;\\n case '21': // Speed Dial Settings\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\n var alertSetting = '';\\n var enalbleDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n alertSetting = 'Disable, '\\n //enableDisable = '0';\\n };\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n //alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n }\\n }\\n }\\n if (command == '03') {\\n while (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n case '01': // Device ID\\n var imei = hexToAscii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n return;\\n }\\n break;\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /* case '03':\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n break; */\\n case '10': // Heartbeat\\n var heartbeat = hexToAscii(value);\\n event_time = moment.utc().unix();\\n if (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\n key = message.substring(index, index = index + 2);\\n if (key == '24') {\\n // debug('key: ' + key) //comment those out\\n value = message.substring(index, index = index + keyLength - 2);\\n // debug(value)\\n var timestampHex = value.substring(0, 8);\\n // debug('timestampt hex: ' + timestampHex)\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n // debug(event_time)\\n var statusHex = changeEndianness(value.substring(8, 16));\\n // debug(statusHex)\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n }\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n // debug('statusHex:' + statusHex)\\n statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n // debug(statusHex)\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n // debug(battery_percentage)\\n // debug(battery_percentage)\\n // debug(statusHex.substring(8, 13))\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n // debug(cellNetworkSignal)\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n // debug(workMode)\\n general += 'statusDevice:' + statusDevice + ';';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ';';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ';';\\n }\\n }\\n }\\n // revisar\\n var gen_location = '0';\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '12': // Device requesting timestamp\\n timestamp = moment.utc().unix();\\n timestampHex = decimalToHex(timestamp);\\n timestampHex = changeEndianness(timestampHex);\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n // respond to device with the timestamp of the server\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '21': //Cell Towers\\n var mccHex = value.substring(0, 2);\\n var mncHex = value.substring(2, 3);\\n var mcc = hexToDecimal(mccHex);\\n var mnc = hexToDecimal(mncHex);\\n var numTowers = (keyLength - 4) / 5;\\n var cellTowers = hexToAscii(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '22': // WIFI locations \\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n gen_location = '';\\n for (let i = 0; i < numWifi; i++) {\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n gen_location = gen_location.slice(0, -1);\\n general += gen_location;\\n //CustomID is not provided so far with command type 03\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n alarmCode = '';\\n break;\\n }\\n }\\n }\\n if (command == '04') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7E') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7F') {\\n // while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\n //}\\n }\\n if (command == 'FE') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n // prepare the ACK msg and change config if it is needed\\n lengthAck = messageBody.length / 2;\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\n ////////////checksum CRC 16\\n var checksumAck = byteStringToByteArray(messageBody);\\n checksumAck = crc16byte(checksumAck);\\n checksumAck = decimalToHex(checksumAck);\\n checksumAck = ('0000' + checksumAck).slice(-4);\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\n // To send ACK to the device previous to internal msg with parts\\n if (needsAck == true) {\\n if (messageBody.length <= 2) {\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\n } else {\\n ack = prefix + messageBody;\\n }\\n AddValue(codeValues, 'imei', imei);\\n AddValue(codeValues, 'ack', ack);\\n }\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\n if (i >= 0) {\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n }\\n // Auxiliary functions\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\n const dataToReceiver = {\\n values: codeValues\\n };\\n if (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck;\\n }\\n if (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate;\\n }\\n if (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend;\\n }\\n return dataToReceiver;\\n }\\n\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n codeValueArray.push(cvpair);\\n }\\n // convert functions\\n function asciiToHex(str) { // ascii to hex \\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\n }\\n\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\n const bytes = [];\\n for (let i = 0; i < str.length; i += 2) {\\n const byte = parseInt(str.substring(i, i + 2), 16);\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\n bytes.push(byte);\\n }\\n }\\n return bytes;\\n }\\n\\n function decimalToHex(x) {\\n return Number(x).toString(16).toUpperCase();\\n }\\n\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\n const bin = parseInt(hex, 16).toString(2);\\n return bin.padStart(hex.length * 4, '0');\\n }\\n\\n function hexToAscii(hex) {\\n if (hex.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\n }\\n\\n function hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 !== 0) {\\n hex = '0' + hex;\\n }\\n const num = parseInt(hex, 16);\\n const bits = hex.length * 4;\\n const maxVal = 2 ** bits;\\n return num >= maxVal / 2 ? num - maxVal : num;\\n }\\n\\n function hexToDecimal(hex) {\\n return parseInt(hex, 16);\\n }\\n // CheckSum and debug functions\\n function changeEndianness(hexString) { // changeEndianness\\n if (hexString.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\n .reverse() // invierte el orden\\n .join('');\\n }\\n\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\n const bytes = byteStringToByteArray(payloadData);\\n const crc = crc16byte(bytes);\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\n return changeEndianness(hex);\\n }\\n\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\n let crc = 0x0000;\\n for (const byte of byteArray) {\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\n }\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[index] ^ (crc << 8);\\n }\\n return crc & 0xFFFF;\\n }\\n\\n function debug(...args) { // write debug info to console log, if localTesting\\n if (localTesting) {\\n console.debug('[DEBUG]', ...args);\\n }\\n }\\n /*\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting) {\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5878, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5878, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n }*/\\n function sendMessageToLocalhostNoWait(message) {\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\n const port = '5678'; //acceptance-dev\\n if (localTesting) {\\n console.debug('[DEBUG] Sending message to test server:', message);\\n }\\n const client = net.createConnection(port, server, () => {\\n client.write(message);\\n client.end();\\n });\\n client.on('error', (err) => {\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\n });\\n client.on('end', () => {\\n if (localTesting) {\\n console.debug('[DEBUG] Connection closed');\\n }\\n });\\n }\\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, net, 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":1744278584},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n ///////////////////////////////////////////////////////////////////////////////\\n //\\n // Roam protocol - please see variables and typical values in order below\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\n //\\n // Author: Juanmi Navarro\\n // Created: 01/01/0000\\n // Last modified: 22/03/2025\\n //\\n ///////////////////////////////////////////////////////////////////////////////\\n if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n }\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n ];\\n var codeValues = [];\\n AddValue(codeValues, 'protocol_template', 'Roam');\\n AddValue(codeValues, 'product', serverParams.ProductName);\\n var dataToReceiver = [];\\n var configsToAck = [];\\n var configsToUpdate = [];\\n var configsToSend = [];\\n if (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n AddValue(codeValues, 'rawMsg', raw);\\n //general SMS message\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n return;\\n }\\n AddValue(codeValues, 'raw', raw);\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\n var homeBeacon = '';\\n var homeWiFi = '';\\n var contacts = '';\\n var gps_data = '';\\n var wifi_data = '';\\n var status_data = '';\\n var lbs_data = '';\\n var beacon_data = '';\\n var ble_data = '';\\n var smart_data = '';\\n //parse header & properties\\n var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n var lengthLittleEndian = message.substring(4, 8);\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\n var messageForReceiver;\\n var sequenceID = message.substring(12, 16);\\n var command = message.substring(16, 18);\\n var index = 18;\\n var prefix = 'AB' + '00';\\n var lengthAck = 0;\\n var ack = '';\\n var needsAck = false;\\n var hasConfigs = false;\\n var general = '';\\n var timestamp = '';\\n var info = '';\\n var customID = '';\\n latitude = 0;\\n longitude = 0;\\n location_accuracy = 0; // GPS location adds the accuracy\\n location_time = event_time = '';\\n speed = 0.0;\\n var location_type = '0';\\n //var gen_location = '0'; \\n var i; // general loop counter\\n var battery_percentage = '';\\n var cellNetworkSignal = '';\\n var workMode = '';\\n //mask bitwise (properties should be '10')\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\n needsAck = true;\\n }\\n // Loop to decode multi-ACK msg\\n if (message.includes('AB00030008C7')) {\\n const multiack = message.split('AB00');\\n for (let i = 1; i < multiack.length; i++) {\\n message = 'AB00' + multiack[i];\\n debug(message);\\n decoder(message);\\n } // FOR multiACK\\n } else decoder(message); // IF multiACK\\n } else if (oystaTemplate == 'True') { // Oysta Template \\n AddValue(codeValues, 'rawMsg', raw);\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\n var gen_location = params.gps_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var location_accuracy = gen_location[2];\\n var speed = gen_location[3];\\n var direction = gen_location[4];\\n var altitude = gen_location[5];\\n var satellites = gen_location[6];\\n var mileage = gen_location[7];\\n if (location_accuracy !== 0) {\\n var fix_state = 1;\\n } else {\\n var fix_state = 0;\\n }\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n AddValue(codeValues, 'speed', speed);\\n AddValue(codeValues, 'direction', direction);\\n AddValue(codeValues, 'altitude', altitude);\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\n AddValue(codeValues, 'mileage', mileage);\\n AddValue(codeValues, 'satellites', satellites);\\n AddValue(codeValues, 'fix_state', fix_state);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\n var variables = []; //Define array\\n variables = params.lbs_data.split(',');\\n var index = 2;\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\n AddValue(codeValues, 'mcc', variables[0]);\\n AddValue(codeValues, 'mnc', variables[1]);\\n AddValue(codeValues, 'lac', variables[index]);\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\n }\\n index += 3;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\n var bssid_array = params.wifi_data.split(',');\\n var index = 0;\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\n }\\n index += 2;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n // when Beacon is detected and it isn't flic BLE detected\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\n var gen_location = params.beacon_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var mac = gen_location[2];\\n var label = gen_location[3];\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac) {\\n AddValue(codeValues, 'beacon_mac', mac);\\n var simpleQuery = [{\\n 'code': 'Mac',\\n 'value': mac,\\n }];\\n var simpleQueryLabel = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery\\n };\\n var labels = [];\\n labels.push(JSON.stringify(simpleQueryLabel));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\n var gen_location = params.ble_data.split(',');\\n var flag = gen_location[0];\\n var batLevel = gen_location[1];\\n var mac2 = gen_location[2];\\n //var label = gen_location[3];\\n AddValue(codeValues, 'flagBLE', flag);\\n AddValue(codeValues, 'batBLE', batLevel);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac2) {\\n AddValue(codeValues, 'beacon_mac', mac2);\\n var simpleQuery2 = [{\\n 'code': 'Mac',\\n 'value': mac2,\\n }];\\n var simpleQueryLabel2 = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery2\\n };\\n var labels2 = [];\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n /* meter mas tarde... \\n if (params.smart_data !== 'undefined') {\\n var gen_location = params.smart_data.split(',')\\n var latitude = gen_location[0]\\n var longitude = gen_location[1]\\n var location_accuracy = gen_location[2]\\n var altitude = gen_location[3]\\n AddValue(codeValues,'latitude', latitude);\\n AddValue(codeValues,'longitude', longitude);\\n AddValue(codeValues,'altitude', altitude);\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\n }\\n */\\n /*else if ((params.event_time) && (params.event_time == '')) {\\n var event_time = moment.utc().unix();\\n AddValue(codeValues,'event_time', event_time);\\n } revisar mas adelante*/\\n // to parse SMS info from the device\\n switch (messageTypeLocalCode) {\\n case 'COMM-SMS': // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\n } else if (params.data.startsWith('flush ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('Set Roam-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('set live tracking')) {\\n configsToAck.push(configIds.Controls.Trace);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.Controls.Reboot);\\n } else if (params.data.startsWith('GPS')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n var i1 = params.data.search('Now:')\\n var i2 = params.data.search('Loc Time:')\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(i2 + 9, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\n //var i1 = params.data.search('IMEI:')\\n //var i2 = params.data.search('GSM signal quality:')\\n var i3 = params.data.search('Software version:')\\n var sub = params.data.substring(i3 + 17, params.data.length)\\n var i4 = sub.search('version:');\\n var fwVersion = sub.substring(i4, sub.length);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\n var i1 = params.data.search('Fall alarm:');\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\n var i2 = params.data.search('level:');\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\n break;\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\n var i1 = raw.search('1,');\\n //var i2 = params.data.search('2,');\\n //var homeBeacon = params.data.substring(i1+2, i2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = raw.search('A1:');\\n if (raw.includes('A2:')) {\\n var i2 = raw.search('A2:');\\n } else {\\n var i2 = raw.search('A10:');\\n }\\n var tel = raw.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n i2 = raw.search('A10:')\\n tel = raw.substring(i2 + 4, raw.length);\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = params.data.search('APN:')\\n var i2 = params.data.search('IP:')\\n var i3 = params.data.search('Move')\\n var apn = params.data.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n var serverDetails = params.data.substring(i2 + 3, i3);\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(0, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n }\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\n var event_time = moment.utc().unix();\\n AddValue(codeValues, 'event_time', event_time);\\n }\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\n // var location_time = moment.utc().unix();\\n // AddValue(codeValues, 'location_time', location_time);\\n //}\\n }\\n // send data msg to kibana\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n console.log(data);\\n return data\\n // end of main operation\\n // define functions used in operation\\n // decode global msg\\n function decoder(str) { // decode rawdata\\n // CARE Decoder\\n AddValue(codeValues, 'Message : ', str);\\n var message = str;\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\n var checksum = message.substring(8, 12);\\n var messageBody = message.substring(16, message.length);\\n debug('message =' + message);\\n debug('checksum =' + checksum);\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\n debug(\\\"message has valid checksum\\\");\\n var messageBody = command; // update value for the ACK\\n debug('command =' + command);\\n if (command == '01') {\\n while (index < total_length + 16) {\\n // gen_location = '0'; //cambiado 30/09\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n //Device ID\\n case '01':\\n var imei = hexToAscii(value);\\n break;\\n //Alarm code\\n case '02':\\n var alarm = 'CYC';\\n var alarmCode = value.substring(0, 8);\\n alarmCode = changeEndianness(alarmCode);\\n var timestampHex = value.substring(8, 16);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n var alarmCodeInt = hexToDecimal(alarmCode);\\n var alarmCodeExt = value.substring(16, 24);\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\n //Extended Alerts\\n // Fall off\\n if ((alarmCodeExtInt & 1) == 1) {\\n var alarm = 'ALF-C';\\n }\\n // Welfare Check-out\\n else if ((alarmCodeExtInt & 2) == 2) {\\n var alarm = 'ALA-C';\\n }\\n // Standard Alerts\\n //Battery low\\n else if ((alarmCodeInt & 1) == 1) {\\n var alarm = 'BATL';\\n }\\n //Overspeed\\n else if ((alarmCodeInt & 2) == 2) {\\n var alarm = 'ALSP';\\n }\\n //Fall\\n else if ((alarmCodeInt & 4) == 4) {\\n var alarm = 'ALF';\\n }\\n //Tilt\\n else if ((alarmCodeInt & 8) == 8) {\\n var alarm = 'Tilt';\\n } else if ((alarmCodeInt & 16) == 16) {\\n if ((alarmCodeInt & 16777216) == 16777216) {\\n var alarm = 'Geo1-IN';\\n } else {\\n var alarm = 'Geo1-OUT';\\n }\\n } else if ((alarmCodeInt & 32) == 32) {\\n if ((alarmCodeInt & 33554432) == 33554432) {\\n var alarm = 'Geo2-IN';\\n } else {\\n var alarm = 'Geo2-OUT';\\n }\\n } else if ((alarmCodeInt & 64) == 64) {\\n if ((alarmCodeInt & 67108864) == 67108864) {\\n var alarm = 'Geo3-IN';\\n } else {\\n var alarm = 'Geo3-OUT';\\n }\\n } else if ((alarmCodeInt & 128) == 128) {\\n if ((alarmCodeInt & 134217728) == 134217728) {\\n var alarm = 'Geo4-IN';\\n } else {\\n var alarm = 'Geo4-OUT';\\n }\\n }\\n //Power Off\\n else if ((alarmCodeInt & 256) == 256) {\\n var alarm = 'PWRF';\\n }\\n //Power On\\n else if ((alarmCodeInt & 512) == 512) {\\n var alarm = 'PWRN';\\n }\\n //Motion\\n else if ((alarmCodeInt & 1024) == 1024) {\\n var alarm = 'ALMOV';\\n }\\n //No Motion\\n else if ((alarmCodeInt & 2048) == 2048) {\\n var alarm = 'ALNM';\\n }\\n //SOS\\n else if ((alarmCodeInt & 4096) == 4096) {\\n var alarm = 'ALSOS';\\n } else if ((alarmCodeInt & 8192) == 8192) {\\n var alarm = 'Side1';\\n } else if ((alarmCodeInt & 16384) == 16384) {\\n var alarm = 'Side2';\\n }\\n //Battery charging\\n else if ((alarmCodeInt & 32768) == 32768) {\\n var alarm = 'BATCN';\\n }\\n //Battery no charging\\n else if ((alarmCodeInt & 65536) == 65536) {\\n var alarm = 'BATCF';\\n }\\n //SOS Ending\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\n else if ((alarmCodeInt & 131072) == 131072) {\\n var alarm = 'SOSEnding';\\n info = 'Alarm Finished';\\n }\\n //Amber Alert EC03 only\\n else if ((alarmCodeInt & 262144) == 262144) {\\n var alarm = 'ALAO';\\n }\\n // welfare Alert check-in ALA-O\\n else if ((alarmCodeInt & 524288) == 524288) {\\n var alarm = 'ALA-O';\\n }\\n // Amber alert Ending ALA-C\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\n var alarm = 'ALA-C';\\n }\\n // Amber alert Ending ALA-C\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\n // var alarm = 'ALA-C';\\n //}\\n // Fall-Down Alert ending\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\n var alarm = 'ALF-C';\\n }\\n // welfare Alert Ending ALA\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\n var alarm = 'ALA';\\n }\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\n // var alarm = 'BEA';\\n //}\\n general += 'alarm:' + alarm + ',';\\n break;\\n //Custom ID\\n case '03':\\n // in value is customID.... '06' for Watch Care\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // exit decoder\\n // const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n // console.log(data);\\n return // data\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n //Historical Data Completed\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\n var histData = true;\\n break;\\n //GPS location\\n case '20':\\n location_type = 'GPS';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var speedHex = value.substring(16, 20);\\n var directionHex = value.substring(20, 24);\\n var altitudeHex = value.substring(24, 28);\\n var location_accuracyHex = value.substring(28, 32);\\n var mileageHex = value.substring(32, 40);\\n var satellitesHex = value.substring(40, 42);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\n var direction = hexToDecimal(changeEndianness(directionHex));\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n // Range: 0.5 to 99.9 \\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\n var satellites = hexToDecimal(satellitesHex);\\n // location_time = timestamp;\\n //<>,<>,<>,<>,<>\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //WIFI Towers\\n case '22':\\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n wifi_data = '';\\n for (let i = 0; i < numWifi; i++) {\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n wifi_data = wifi_data.slice(0, -1);\\n general += wifi_data;\\n break;\\n //BLE Location Added 10/10/22\\n case '23':\\n location_type = 'BLE';\\n var mac = value.substring(0, 12);\\n var latitudeHex = value.substring(12, 20);\\n var longitudeHex = value.substring(20, 28);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var address = hexToAscii(value.substring(28, value.length));\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n // location_time = timestamp;\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //General Data , status_data\\n case '24':\\n //var general = 'true'\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n }\\n //else {\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\n //}\\n // reset variables\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n location_time = timestamp;\\n event_time = timestamp;\\n // HardCode to fix possible issue in protocol\\n //event_time = moment.utc().unix();\\n // end of hard code\\n var statusHex = changeEndianness(value.substring(8, 16));\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n //params.BatteryStatus.BatteryStatus = '1';\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n // var alarm = 'BATCN';\\n //configs.BatteryStatus.BatteryStatus = '1';\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\n hasConfigs = true;\\n var batteryStatus = '1';\\n var alarm = 'BATCN';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n //var alarm = 'BATF';\\n // configs.BatteryStatus.BatteryStatus = '3';\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\n hasConfigs = true;\\n var batteryStatus = '3';\\n var alarm = 'BATF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\n statusDevice += 'Not Charging,';\\n var alarm = 'BATCF';\\n //configs.BatteryStatus.BatteryStatus = '2';\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\n var batteryStatus = '2';\\n var alarm = 'BATCF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }\\n }*/\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) { //isHome\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n if ((statusInt & 16384) == 16384) {\\n statusDevice += 'HomeWiFi,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n //statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n general += 'statusDevice:' + statusDevice + ',';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ',';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ',';\\n }\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\n break;\\n //Call Records\\n case '25':\\n //Needed?\\n break;\\n //BLE Location 2\\n case '26':\\n //I don't understand\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Smart Location\\n case '27':\\n location_type = 'SMART';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var location_accuracyHex = value.substring(16, 20);\\n var altitudeHex = value.substring(20, 24);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //location_time = timestamp;\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //Beacon Location Added 11/10/22\\n case '28':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n descr = hexToAscii(value.substring(34, value.length));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n // var latitudeHex = value.substring(18, 26);\\n // var longitudeHex = value.substring(26, 34);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\n break;\\n // Beacon V2\\n case '2C':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(20, 28);\\n longitudeHex = value.substring(28, 36);\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\n break;\\n //Cell Towers Note\\n case '29':\\n location_type = 'LBS';\\n lbs_data = '';\\n var mccHex = changeEndianness(value.substring(0, 4));\\n var mncHex = value.substring(4, 6);\\n var mcc = hexToDecimal(mccHex);\\n lbs_data += mcc + ',';\\n var mnc = hexToDecimal(mncHex);\\n lbs_data += mnc + ',';\\n var indexLbs = 6;\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\n for (let i = 0; i < numTowers; i++) {\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\n var rxl = hexToDecimal(rxlHex);\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\n var lac = hexToDecimal(lacHex);\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\n indexLbs += 14;\\n }\\n lbs_data = lbs_data.slice(0, -1);\\n general += lbs_data;\\n break;\\n case '30':\\n //G-sensor. \\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numStep = (keyLength - 2) / 16;\\n for (let j = 0; j < numStep; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var stepHex = value.substring(8, 16);\\n stepHex = changeEndianness(stepHex);\\n var stepRate = hexToDecimal(stepHex);\\n info = stepRate;\\n //var alarmCode = 'True';\\n var alarm = 'STP';\\n general += ' step counting' + j + ':' + stepRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //Activity\\n case '31':\\n //I don't understand\\n break;\\n //BLE MAC list\\n case '32':\\n //I don't understand\\n break;\\n //Beacon List\\n case '33':\\n //I don't understand\\n break;\\n //Heart Rate Data\\n case '40':\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numHeartRate = (keyLength - 2) / 12;\\n for (let j = 0; j < numHeartRate; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var heartRateHex = value.substring(8, 10);\\n var heartRate = hexToDecimal(heartRateHex);\\n var trustLevelHex = value.substring(10, 12);\\n var trustLevel = hexToDecimal(trustLevelHex);\\n info = heartRate;\\n //var alarmCode = 'True';\\n var alarm = 'HRT';\\n general += ' heart rate' + j + ':' + heartRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //BLE Connected . For Flic button\\n case '62':\\n location_type = 'BLE';\\n //var alarm = 'EBZI'; \\n //var latitudeHex = '00';\\n //var longitudeHex = '00';\\n //var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\n //location_time = timestamp;\\n ble_data = `${flag},${batLevel},${mac}`;\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\n break;\\n }\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n /*else if (alarm === 'HRT') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (alarm === 'STP') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }*/\\n // rest the alarm value\\n alarm = '';\\n }\\n if (command == '02') {\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n switch (key) {\\n //Module Number\\n case '01':\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Firmware version\\n case '02':\\n //no ACK need\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersion = hexToAscii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\n // harcode to avoid conflicts with Rio protocol\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\n // return\\n //}\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //ICCID\\n case '04':\\n var iccid = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //BLE-MAC\\n case '05':\\n var bleMac = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Run Time\\n case '07':\\n var runTime = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '10': // Ringer Volume\\n var volume = hexToDecimal(value);\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"Volume\\\", volume);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\n break;\\n case '0A': //Performance mode\\n //var workMode = hexToDecimal(value);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n //var workMode = hexToDecimal(value);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n var workMode = 1234; // + value + \\\"end\\\";\\n //var workModeVal = 9;\\n //workMode = 'test10';\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n break;\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1F':\\n //System Language\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n //messageBody = messageBody + keyLengthHex + key + value;\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\n break;\\n case '33': // phone option\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\n var auto = 'true';\\n } else var auto = 'false';\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\n allow = 'true';\\n } else var allow = 'false';\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\n break;\\n case '30': //ContactList\\n var contactNumber = value.substring(1, 2);\\n var telLength = hexToDecimal(value.substring(2, 4));\\n var tel = '';\\n switch (contactNumber) {\\n // Emergency Number\\n case '0':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n break;\\n // Speed Dial Number\\n case '1':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\n break;\\n // Gateway Number\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\n tel = 'Esendex UK'\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\n tel = 'Esendex Spain'\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\n tel = 'Esendex UK Acceptance'\\n } else {\\n tel = 'Default'\\n }\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n break;\\n default:\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.length < 6) {\\n contacts += '';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\n contacts += tel + ', ';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n break;\\n case '40': // APN\\n //no ACK need\\n var apn = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n break;\\n case '41': // APN Username\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n break;\\n case '42': // APN Password\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n break;\\n case '43': //Server Details\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\n if (serverDetails.includes('52.232.85.255:5678')) {\\n serverDetails = 'Production'\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\n serverDetails = 'Acceptance'\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\n serverDetails = 'Protocol-Import'\\n } else {\\n serverDetails = 'Default'\\n }\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n break;\\n case '44': //time interval - work mode intervals\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n var workMode = 0;\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\n //workMode = 'High Frequency';\\n workMode = 3;\\n }\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\n //workMode = 'Balanced';\\n workMode = 2;\\n }\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\n //workMode = 'Power Saving';\\n workMode = 1;\\n }\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\n //workMode = 'No Reporting';\\n workMode = 0;\\n }\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '47': // Custom Id\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"customeid\\\", value);\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\n configsToAck.push(configIds.ReadState.CustomId);\\n break;\\n case '53': // Non motion alert\\n //2B020080\\n var status = hexToBin(value.substring(6, 8));\\n var alertSetting = '';\\n var enableDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enableDisable = '1';\\n } else {\\n alertSetting = 'Disable, '\\n };\\n //if (status.substring(5, 6) == '1') {\\n // alertSetting += 'Dial, '\\n //} else {\\n // alertSetting += 'No Dial, '\\n //};\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n case '56': //Fall down sensibility\\n // '00001100'\\n var fallStatus = hexToBin(value.substring(0, 2));\\n var enalbleDisable = '';\\n //if (fallStatus.substring(4, 5) == '1') {\\n if (fallStatus.substring(0, 1) == '1') {\\n var sensibility = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n var sensibility = 'Disable, '\\n };\\n if (fallStatus.substring(5, 6) == '1') {\\n sensibility += 'Dial, '\\n } else {\\n sensibility += 'No Dial, '\\n };\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\n sensibility += sesibityOptionValue;\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\n break;\\n case '73': //BeaconList\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\n var beaconStatus = hexToBin(value.substring(0, 1));\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\n homeBeacon += beaconStatus + ', ';\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case '4A': //Wifi Network List\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\n var wifiStatus = value.substring(0, 1);\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\n /var homeWifi = '';\\n if (wifiIndex == '0') { // Only first Wifi of the list\\n if (wifiStatus == '8') {\\n homeWifi += ' Enable, '\\n enalbleDisable = '1';\\n } else {\\n homeWifi += ' Disable, '\\n //enalbleDisable = '0';\\n };*/\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n }\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\n break;\\n case '21': // Speed Dial Settings\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\n var alertSetting = '';\\n var enalbleDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n alertSetting = 'Disable, '\\n //enableDisable = '0';\\n };\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n //alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n }\\n }\\n }\\n if (command == '03') {\\n while (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n case '01': // Device ID\\n var imei = hexToAscii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n return;\\n }\\n break;\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /* case '03':\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n break; */\\n case '10': // Heartbeat\\n var heartbeat = hexToAscii(value);\\n event_time = moment.utc().unix();\\n if (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\n key = message.substring(index, index = index + 2);\\n if (key == '24') {\\n // debug('key: ' + key) //comment those out\\n value = message.substring(index, index = index + keyLength - 2);\\n // debug(value)\\n var timestampHex = value.substring(0, 8);\\n // debug('timestampt hex: ' + timestampHex)\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n // debug(event_time)\\n var statusHex = changeEndianness(value.substring(8, 16));\\n // debug(statusHex)\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n }\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n // debug('statusHex:' + statusHex)\\n statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n // debug(statusHex)\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n // debug(battery_percentage)\\n // debug(battery_percentage)\\n // debug(statusHex.substring(8, 13))\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n // debug(cellNetworkSignal)\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n // debug(workMode)\\n general += 'statusDevice:' + statusDevice + ';';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ';';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ';';\\n }\\n }\\n }\\n // revisar\\n var gen_location = '0';\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\n messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '12': // Device requesting timestamp\\n timestamp = moment.utc().unix();\\n timestampHex = decimalToHex(timestamp);\\n timestampHex = changeEndianness(timestampHex);\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n // respond to device with the timestamp of the server\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '21': //Cell Towers\\n var mccHex = value.substring(0, 2);\\n var mncHex = value.substring(2, 3);\\n var mcc = hexToDecimal(mccHex);\\n var mnc = hexToDecimal(mncHex);\\n var numTowers = (keyLength - 4) / 5;\\n var cellTowers = hexToAscii(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '22': // WIFI locations \\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n gen_location = '';\\n for (let i = 0; i < numWifi; i++) {\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n gen_location = gen_location.slice(0, -1);\\n general += gen_location;\\n //CustomID is not provided so far with command type 03\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n alarmCode = '';\\n break;\\n }\\n }\\n }\\n if (command == '04') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7E') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7F') {\\n // while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\n //}\\n }\\n if (command == 'FE') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n // prepare the ACK msg and change config if it is needed\\n lengthAck = messageBody.length / 2;\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\n ////////////checksum CRC 16\\n var checksumAck = byteStringToByteArray(messageBody);\\n checksumAck = crc16byte(checksumAck);\\n checksumAck = decimalToHex(checksumAck);\\n checksumAck = ('0000' + checksumAck).slice(-4);\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\n // To send ACK to the device previous to internal msg with parts\\n if (needsAck == true) {\\n if (messageBody.length <= 2) {\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\n } else {\\n ack = prefix + messageBody;\\n }\\n AddValue(codeValues, 'imei', imei);\\n AddValue(codeValues, 'ack', ack);\\n }\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\n if (i >= 0) {\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n }\\n // Auxiliary functions\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\n const dataToReceiver = {\\n values: codeValues\\n };\\n if (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck;\\n }\\n if (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate;\\n }\\n if (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend;\\n }\\n return dataToReceiver;\\n }\\n\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n codeValueArray.push(cvpair);\\n }\\n // convert functions\\n function asciiToHex(str) { // ascii to hex \\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\n }\\n\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\n const bytes = [];\\n for (let i = 0; i < str.length; i += 2) {\\n const byte = parseInt(str.substring(i, i + 2), 16);\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\n bytes.push(byte);\\n }\\n }\\n return bytes;\\n }\\n\\n function decimalToHex(x) {\\n return Number(x).toString(16).toUpperCase();\\n }\\n\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\n const bin = parseInt(hex, 16).toString(2);\\n return bin.padStart(hex.length * 4, '0');\\n }\\n\\n function hexToAscii(hex) {\\n if (hex.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\n }\\n\\n function hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 !== 0) {\\n hex = '0' + hex;\\n }\\n const num = parseInt(hex, 16);\\n const bits = hex.length * 4;\\n const maxVal = 2 ** bits;\\n return num >= maxVal / 2 ? num - maxVal : num;\\n }\\n\\n function hexToDecimal(hex) {\\n return parseInt(hex, 16);\\n }\\n // CheckSum and debug functions\\n function changeEndianness(hexString) { // changeEndianness\\n if (hexString.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\n .reverse() // invierte el orden\\n .join('');\\n }\\n\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\n const bytes = byteStringToByteArray(payloadData);\\n const crc = crc16byte(bytes);\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\n return changeEndianness(hex);\\n }\\n\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\n let crc = 0x0000;\\n for (const byte of byteArray) {\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\n }\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[index] ^ (crc << 8);\\n }\\n return crc & 0xFFFF;\\n }\\n\\n function debug(...args) { // write debug info to console log, if localTesting\\n if (localTesting) {\\n console.debug('[DEBUG]', ...args);\\n }\\n }\\n /*\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting) {\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5878, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5878, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n }*/\\n function sendMessageToLocalhostNoWait(message) {\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\n const port = '5678'; //acceptance-dev\\n if (localTesting) {\\n console.debug('[DEBUG] Sending message to test server:', message);\\n }\\n const client = net.createConnection(port, server, () => {\\n client.write(message);\\n client.end();\\n });\\n client.on('error', (err) => {\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\n });\\n client.on('end', () => {\\n if (localTesting) {\\n console.debug('[DEBUG] Connection closed');\\n }\\n });\\n }\\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, net, 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":1744367131},{"Type":1,"NewValue":"{\"Id\":313,\"Name\":\"Access TEC Roam\",\"Operation\":\"function execute_ops(moment, msg, net, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n ///////////////////////////////////////////////////////////////////////////////\\n //\\n // Roam protocol - please see variables and typical values in order below\\n // TECRoam-CYC;<>;STATUS=<>;LTIME=<>;ETIME=<>;BATP=<>;LGPS=<>;LWIF=<>;LLBS=<>;LBEACON=<>;BLE=<>;SIGNAL=<>;WM=<>;GENERAL=<>\\n // TECRoam-CYC;861629050193550;STATUS=WIFISource,CellTower;TIME=1673950279;BATP=84;LGPS=undefined;LWIF=-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369;LLBS=214,1,13,768,38529798;LBEACON=undefined;BLE=undefined;GENERAL=statusDevice:WIFISource,CellTower,battery:84,cellNetworkSignal:14,workMode:6,wifiTowers:-54,286F7F3C8EB0,-68,4448B9848AD0,-78,00BF77E05369,214,1,13,768,38529798,;\\\",\\n //\\n // Author: Juanmi Navarro\\n // Created: 01/01/0000\\n // Last modified: 11/04/2025\\n //\\n ///////////////////////////////////////////////////////////////////////////////\\n if (typeof localTesting === \\\"undefined\\\") {\\n let localTesting = \\\"False\\\";\\n }\\n const crcTable = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\\n ];\\n var codeValues = [];\\n AddValue(codeValues, 'protocol_template', 'Roam');\\n AddValue(codeValues, 'product', serverParams.ProductName);\\n var dataToReceiver = [];\\n var configsToAck = [];\\n var configsToUpdate = [];\\n var configsToSend = [];\\n if (globalTemplate == \\\"True\\\") {\\n if (raw.startsWith('esendex')) {\\n AddValue(codeValues, 'rawMsg', raw);\\n //general SMS message\\n messageForReceiver = (`Roam-SMS;${serverParams.Imei};${raw}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n return;\\n }\\n AddValue(codeValues, 'raw', raw);\\n AddValue(codeValues, 'rawMsg', rawFromBytes);\\n var event_time, location_time, location_accuracy, speed, fix_state, latitude, longitude;\\n var homeBeacon = '';\\n var homeWiFi = '';\\n var contacts = '';\\n var gps_data = '';\\n var wifi_data = '';\\n var status_data = '';\\n var lbs_data = '';\\n var beacon_data = '';\\n var ble_data = '';\\n var smart_data = '';\\n //parse header & properties\\n var message = rawFromBytes;\\n var properties = message.substring(2, 4);\\n var lengthLittleEndian = message.substring(4, 8);\\n var total_length = lengthLittleEndian.substring(2, 4) + lengthLittleEndian.substring(0, 2);\\n total_length = 2 * hexToDecimal(total_length.substring(0, 4));\\n var messageForReceiver;\\n var sequenceID = message.substring(12, 16);\\n var command = message.substring(16, 18);\\n var index = 18;\\n var prefix = 'AB' + '00';\\n var lengthAck = 0;\\n var ack = '';\\n var needsAck = false;\\n var hasConfigs = false;\\n var general = '';\\n var timestamp = '';\\n var info = '';\\n var customID = '';\\n latitude = 0;\\n longitude = 0;\\n location_accuracy = 0; // GPS location adds the accuracy\\n location_time = event_time = '';\\n speed = 0.0;\\n var location_type = '0';\\n //var gen_location = '0'; \\n var i; // general loop counter\\n var battery_percentage = '';\\n var cellNetworkSignal = '';\\n var workMode = '';\\n //mask bitwise (properties should be '10')\\n if ((parseInt(properties) & 8) == 8) { // 22/7 change ((parseInt(properties) & 16) == 16)\\n needsAck = true;\\n }\\n // Loop to decode multi-ACK msg\\n if (message.includes('AB00030008C7')) {\\n const multiack = message.split('AB00');\\n for (let i = 1; i < multiack.length; i++) {\\n message = 'AB00' + multiack[i];\\n debug(message);\\n decoder(message);\\n } // FOR multiACK\\n } else decoder(message); // IF multiACK\\n } else if (oystaTemplate == 'True') { // Oysta Template \\n AddValue(codeValues, 'rawMsg', raw);\\n if ((params.gps_data) && (params.gps_data !== '')) { // decode gps data if exists\\n var gen_location = params.gps_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var location_accuracy = gen_location[2];\\n var speed = gen_location[3];\\n var direction = gen_location[4];\\n var altitude = gen_location[5];\\n var satellites = gen_location[6];\\n var mileage = gen_location[7];\\n if (location_accuracy !== 0) {\\n var fix_state = 1;\\n } else {\\n var fix_state = 0;\\n }\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n AddValue(codeValues, 'speed', speed);\\n AddValue(codeValues, 'direction', direction);\\n AddValue(codeValues, 'altitude', altitude);\\n AddValue(codeValues, 'location_accuracy', location_accuracy);\\n AddValue(codeValues, 'mileage', mileage);\\n AddValue(codeValues, 'satellites', satellites);\\n AddValue(codeValues, 'fix_state', fix_state);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.lbs_data) && (params.lbs_data !== '')) { // decode lbs data if exists\\n var variables = []; //Define array\\n variables = params.lbs_data.split(',');\\n var index = 2;\\n for (i = 0; i < ((variables.length - 2) / 3); i++) { //loop for number of LBS sets on incoming data.\\n if (variables[i] !== '0') { //Check if LBS data is present (device sends 0 if data not present)/actually exists.\\n AddValue(codeValues, 'mcc', variables[0]);\\n AddValue(codeValues, 'mnc', variables[1]);\\n AddValue(codeValues, 'lac', variables[index]);\\n AddValue(codeValues, 'signal_lbs', variables[index + 1]);\\n AddValue(codeValues, 'cellid', variables[index + 2]);\\n }\\n index += 3;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.wifi_data) && (params.wifi_data !== '')) { // decode wifi data if exists\\n var bssid_array = params.wifi_data.split(',');\\n var index = 0;\\n for (let i = 0; i < (bssid_array.length / 2); i++) {\\n if (bssid_array[index + 1] != '000000000000') { //Check if MAC address is not 000000000000 - seems to be the default MAC of the device itself\\n AddValue(codeValues, 'bssid', bssid_array[index + 1]);\\n AddValue(codeValues, 'signal_wifi', bssid_array[index]);\\n }\\n index += 2;\\n }\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n // when Beacon is detected and it isn't flic BLE detected\\n if (((params.beacon_data) && (params.beacon_data !== '')) && !((params.ble_data) && (params.ble_data !== ''))) {\\n var gen_location = params.beacon_data.split(',');\\n var latitude = gen_location[0];\\n var longitude = gen_location[1];\\n var mac = gen_location[2];\\n var label = gen_location[3];\\n AddValue(codeValues, 'latitude', latitude);\\n AddValue(codeValues, 'longitude', longitude);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac) {\\n AddValue(codeValues, 'beacon_mac', mac);\\n var simpleQuery = [{\\n 'code': 'Mac',\\n 'value': mac,\\n }];\\n var simpleQueryLabel = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery\\n };\\n var labels = [];\\n labels.push(JSON.stringify(simpleQueryLabel));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n if ((params.ble_data) && (params.ble_data !== '')) { // decode ble data if exists\\n var gen_location = params.ble_data.split(',');\\n var flag = gen_location[0];\\n var batLevel = gen_location[1];\\n var mac2 = gen_location[2];\\n //var label = gen_location[3];\\n AddValue(codeValues, 'flagBLE', flag);\\n AddValue(codeValues, 'batBLE', batLevel);\\n //AddValue(codeValues,'location_accuracy', '3'); // para mostrar que si hay accuracy muestra como source GPS\\n // AddValue(codeValues,'beacon_mac', mac);\\n //AddValue(codeValues,'beacon_major', 0);\\n //AddValue(codeValues,'beacon_minor', 0);\\n //<>,<>,<> \\n if (mac2) {\\n AddValue(codeValues, 'beacon_mac', mac2);\\n var simpleQuery2 = [{\\n 'code': 'Mac',\\n 'value': mac2,\\n }];\\n var simpleQueryLabel2 = {\\n 'table': 'beacons',\\n 'select': 'Name',\\n 'query': simpleQuery2\\n };\\n var labels2 = [];\\n labels2.push(JSON.stringify(simpleQueryLabel2));\\n AddValue(codeValues, 'oysta_labels', JSON.stringify(labels2));\\n }\\n if (params.beacon_major) {\\n AddValue(codeValues, 'beacon_major', params.beacon_major);\\n } else {\\n AddValue(codeValues, 'beacon_major', 0);\\n }\\n if (params.beacon_minor) {\\n AddValue(codeValues, 'beacon_minor', params.beacon_minor);\\n } else {\\n AddValue(codeValues, 'beacon_minor', 0);\\n }\\n //AddValue(codeValues,'oysta_labels', label);\\n //AddValue(codeValues,'oysta_value', mac);\\n if (location_time) {\\n AddValue(codeValues, 'location_time', location_time);\\n }\\n }\\n /* meter mas tarde... \\n if (params.smart_data !== 'undefined') {\\n var gen_location = params.smart_data.split(',')\\n var latitude = gen_location[0]\\n var longitude = gen_location[1]\\n var location_accuracy = gen_location[2]\\n var altitude = gen_location[3]\\n AddValue(codeValues,'latitude', latitude);\\n AddValue(codeValues,'longitude', longitude);\\n AddValue(codeValues,'altitude', altitude);\\n AddValue(codeValues,'location_accuracy', location_accuracy);\\n }\\n */\\n /*else if ((params.event_time) && (params.event_time == '')) {\\n var event_time = moment.utc().unix();\\n AddValue(codeValues,'event_time', event_time);\\n } revisar mas adelante*/\\n // to parse SMS info from the device\\n switch (messageTypeLocalCode) {\\n case 'COMM-SMS': // SMS message sent in\\n if (params.data.startsWith('Device location request')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('IMEI:')) {\\n configsToAck.push(configIds.Controls.GetFirmwareVersion);\\n } else if (params.data.startsWith('Set IP ok')) {\\n configsToAck.push(configIds.Controls.ClearBufferedMessages);\\n } else if (params.data.startsWith('flush ok')) {\\n configsToAck.push(configIds.Controls.GetCurrentConfig);\\n } else if (params.data.startsWith('Set Roam-')) {\\n configsToAck.push(configIds.SMSPrefix.SMSPrefix);\\n } else if (params.data.startsWith('set live tracking')) {\\n configsToAck.push(configIds.Controls.Trace);\\n } else if (params.data.startsWith('reboot ok')) {\\n configsToAck.push(configIds.Controls.Reboot);\\n } else if (params.data.startsWith('GPS')) {\\n configsToAck.push(configIds.Controls.RealTimeLocate);\\n var i1 = params.data.search('Now:')\\n var i2 = params.data.search('Loc Time:')\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(i2 + 9, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n //event_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n //messageForReceiver = (`CARE-RTL;${params.imei};${event_time};${event_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n case 'ACK-FIRM-SMS': // Firmware info sent by SMS\\n //var i1 = params.data.search('IMEI:')\\n //var i2 = params.data.search('GSM signal quality:')\\n var i3 = params.data.search('Software version:')\\n var sub = params.data.substring(i3 + 17, params.data.length)\\n var i4 = sub.search('version:');\\n var fwVersion = sub.substring(i4, sub.length);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n case 'ACK-FALLSENS-SMS': // Fall sensibility info sent by SMS\\n var i1 = params.data.search('Fall alarm:');\\n var sensibility = params.data.substring(i1 + 11, i1 + 14);\\n var i2 = params.data.search('level:');\\n sensibility = sensibility + ', ' + params.data.substring(i2 + 6, i2 + 7);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadEmergencySettings.FallSensitivity, sensibility);\\n configsToAck.push(configIds.ReadEmergencySettings.FallSensitivity);\\n break;\\n case 'ACK-BEAC-SMS': // Beacon list info sent by SMS\\n var i1 = raw.search('1,');\\n //var i2 = params.data.search('2,');\\n //var homeBeacon = params.data.substring(i1+2, i2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"homeBeacon\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case 'ACK-CONTAC-SMS': // Contact list info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = raw.search('A1:');\\n if (raw.includes('A2:')) {\\n var i2 = raw.search('A2:');\\n } else {\\n var i2 = raw.search('A10:');\\n }\\n var tel = raw.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n i2 = raw.search('A10:')\\n tel = raw.substring(i2 + 4, raw.length);\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n AddValue(codeValues, \\\"ApprovedContacts\\\", raw.substring(i1, raw.length));\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, raw.substring(i1, raw.length));\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n case 'ACK-SERV-SMS': // APN and Server info sent by SMS\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n var i1 = params.data.search('APN:')\\n var i2 = params.data.search('IP:')\\n var i3 = params.data.search('Move')\\n var apn = params.data.substring(i1 + 4, i2);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n var serverDetails = params.data.substring(i2 + 3, i3);\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case 'RTL-GPS': // SRTL sent in via SMS with no pre-code\\n var i3 = params.data.search('Speed:')\\n var i4 = params.data.search('Altitude:')\\n var i5 = params.data.search('Battery:')\\n var i6 = params.data.search('google')\\n var eventTime = params.data.substring(0, i3)\\n var Speed = params.data.substring(i3 + 6, i4 - 3)\\n if (params.data.substring(i4 - 3, i4) == 'mph') {\\n Speed = Speed * 0.44704\\n } else if (params.data.substring(i4 - 3, i4) == 'kph') {\\n Speed = Speed / 3.6\\n }\\n var latlong = params.data.substring(i6 + 18)\\n location_time = moment(eventTime, 'MM/DD/YYYY HH:mm:ss').unix()\\n messageForReceiver = (`Roam-RTL;${params.imei};${location_time};${location_time};${latlong.split(',')[0]};${latlong.split(',')[1]};9000;${params.data.substring(i4+9,i5)};${Speed};${params.data.substring(i5+8,i6-5)};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n }\\n if (!params.event_time && !event_time) { // if params.event_time undefined - set it to now. \\n var event_time = moment.utc().unix();\\n AddValue(codeValues, 'event_time', event_time);\\n }\\n // if (!params.location_time && !location_time) { // if params.location_time undefined - set it to now. \\n // var location_time = moment.utc().unix();\\n // AddValue(codeValues, 'location_time', location_time);\\n //}\\n }\\n // send data msg to kibana\\n const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n console.log(data);\\n return data\\n // end of main operation\\n // define functions used in operation\\n // decode global msg\\n function decoder(str) { // decode rawdata\\n // CARE Decoder\\n AddValue(codeValues, 'Message : ', str);\\n var message = str;\\n // need to check if checksum is correct for possible msg corruption 10/03/23\\n var checksum = message.substring(8, 12);\\n var messageBody = message.substring(16, message.length);\\n debug('message =' + message);\\n debug('checksum =' + checksum);\\n debug('calculateCheckSum =' + calculateCheckSum(messageBody));\\n if (calculateCheckSum(messageBody) == checksum) { // payload is valid\\n debug(\\\"message has valid checksum\\\");\\n var messageBody = command; // update value for the ACK\\n debug('command =' + command);\\n if (command == '01') {\\n while (index < total_length + 16) {\\n // gen_location = '0'; //cambiado 30/09\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n //Device ID\\n case '01':\\n var imei = hexToAscii(value);\\n break;\\n //Alarm code\\n case '02':\\n var alarm = 'CYC';\\n var alarmCode = value.substring(0, 8);\\n alarmCode = changeEndianness(alarmCode);\\n var timestampHex = value.substring(8, 16);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n var alarmCodeInt = hexToDecimal(alarmCode);\\n var alarmCodeExt = value.substring(16, 24);\\n alarmCodeExt = changeEndianness(alarmCodeExt);\\n var alarmCodeExtInt = hexToDecimal(alarmCodeExt);\\n //Extended Alerts\\n // Fall off\\n if ((alarmCodeExtInt & 1) == 1) {\\n var alarm = 'ALF-C';\\n }\\n // Welfare Check-out\\n else if ((alarmCodeExtInt & 2) == 2) {\\n var alarm = 'ALA-C';\\n }\\n // Standard Alerts\\n //Battery low\\n else if ((alarmCodeInt & 1) == 1) {\\n var alarm = 'BATL';\\n }\\n //Overspeed\\n else if ((alarmCodeInt & 2) == 2) {\\n var alarm = 'ALSP';\\n }\\n //Fall\\n else if ((alarmCodeInt & 4) == 4) {\\n var alarm = 'ALF';\\n }\\n //Tilt\\n else if ((alarmCodeInt & 8) == 8) {\\n var alarm = 'Tilt';\\n } else if ((alarmCodeInt & 16) == 16) {\\n if ((alarmCodeInt & 16777216) == 16777216) {\\n var alarm = 'Geo1-IN';\\n } else {\\n var alarm = 'Geo1-OUT';\\n }\\n } else if ((alarmCodeInt & 32) == 32) {\\n if ((alarmCodeInt & 33554432) == 33554432) {\\n var alarm = 'Geo2-IN';\\n } else {\\n var alarm = 'Geo2-OUT';\\n }\\n } else if ((alarmCodeInt & 64) == 64) {\\n if ((alarmCodeInt & 67108864) == 67108864) {\\n var alarm = 'Geo3-IN';\\n } else {\\n var alarm = 'Geo3-OUT';\\n }\\n } else if ((alarmCodeInt & 128) == 128) {\\n if ((alarmCodeInt & 134217728) == 134217728) {\\n var alarm = 'Geo4-IN';\\n } else {\\n var alarm = 'Geo4-OUT';\\n }\\n }\\n //Power Off\\n else if ((alarmCodeInt & 256) == 256) {\\n var alarm = 'PWRF';\\n }\\n //Power On\\n else if ((alarmCodeInt & 512) == 512) {\\n var alarm = 'PWRN';\\n }\\n //Motion\\n else if ((alarmCodeInt & 1024) == 1024) {\\n var alarm = 'ALMOV';\\n }\\n //No Motion\\n else if ((alarmCodeInt & 2048) == 2048) {\\n var alarm = 'ALNM';\\n }\\n //SOS\\n else if ((alarmCodeInt & 4096) == 4096) {\\n var alarm = 'ALSOS';\\n } else if ((alarmCodeInt & 8192) == 8192) {\\n var alarm = 'Side1';\\n } else if ((alarmCodeInt & 16384) == 16384) {\\n var alarm = 'Side2';\\n }\\n //Battery charging\\n else if ((alarmCodeInt & 32768) == 32768) {\\n var alarm = 'BATCN';\\n }\\n //Battery no charging\\n else if ((alarmCodeInt & 65536) == 65536) {\\n var alarm = 'BATCF';\\n }\\n //SOS Ending\\n // Temporary Commented until we know exactly how it works. 22/09/2022\\n else if ((alarmCodeInt & 131072) == 131072) {\\n var alarm = 'SOSEnding';\\n info = 'Alarm Finished';\\n }\\n //Amber Alert EC03 only\\n else if ((alarmCodeInt & 262144) == 262144) {\\n var alarm = 'ALAO';\\n }\\n // welfare Alert check-in ALA-O\\n else if ((alarmCodeInt & 524288) == 524288) {\\n var alarm = 'ALA-O';\\n }\\n // Amber alert Ending ALA-C\\n else if ((alarmCodeInt & 1048576) == 1048576) {\\n var alarm = 'ALA-C';\\n }\\n // Amber alert Ending ALA-C\\n //else if ((alarmCodeInt & 1048576) == 1048576) {\\n // var alarm = 'ALA-C';\\n //}\\n // Fall-Down Alert ending\\n else if ((alarmCodeInt & 2097152) == 2097152) {\\n var alarm = 'ALF-C';\\n }\\n // welfare Alert Ending ALA\\n else if ((alarmCodeInt & 4194304) == 4194304) {\\n var alarm = 'ALA';\\n }\\n // Beacon absent Alert 11/10/22. Need to be added in msg types\\n //else if ((alarmCodeInt & 16777216) == 16777216) {\\n // var alarm = 'BEA';\\n //}\\n general += 'alarm:' + alarm + ',';\\n break;\\n //Custom ID\\n case '03':\\n // in value is customID.... '06' for Watch Care\\n // if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n // exit decoder\\n // const data = buildDataToReceiver(codeValues, configsToAck, configsToUpdate, configsToSend);\\n // console.log(data);\\n return // data\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n //Historical Data Completed\\n case '10': // indica q se han terminado de enviar todos los datos historicos.\\n var histData = true;\\n break;\\n //GPS location\\n case '20':\\n location_type = 'GPS';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var speedHex = value.substring(16, 20);\\n var directionHex = value.substring(20, 24);\\n var altitudeHex = value.substring(24, 28);\\n var location_accuracyHex = value.substring(28, 32);\\n var mileageHex = value.substring(32, 40);\\n var satellitesHex = value.substring(40, 42);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n speed = ((hexToDecimal(changeEndianness(speedHex))) / 3.6).toFixed(2); //date 14-02-2023 in m/s\\n var direction = hexToDecimal(changeEndianness(directionHex));\\n var altitude = hexToDecimal(changeEndianness(altitudeHex)); // in meters\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n // Range: 0.5 to 99.9 \\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //var mileage = hexToDecimal(changeEndianness(mileageHex)) this is in km/h we need m/s\\n var mileage = hexToDecimal(changeEndianness(mileageHex)); // in meters date 14-02-2023\\n var satellites = hexToDecimal(satellitesHex);\\n // location_time = timestamp;\\n //<>,<>,<>,<>,<>\\n gps_data = `${latitude},${longitude},${location_accuracy},${speed},${direction},${altitude},${satellites},${mileage}`;\\n general += 'gps location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //WIFI Towers\\n case '22':\\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n wifi_data = '';\\n for (let i = 0; i < numWifi; i++) {\\n wifi_data += hexToDecimalSigned(wifiTowers.substring(indexWifi, indexWifi + 2)) + ',' + wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n wifi_data = wifi_data.slice(0, -1);\\n general += wifi_data;\\n break;\\n //BLE Location Added 10/10/22\\n case '23':\\n location_type = 'BLE';\\n var mac = value.substring(0, 12);\\n var latitudeHex = value.substring(12, 20);\\n var longitudeHex = value.substring(20, 28);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var address = hexToAscii(value.substring(28, value.length));\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n // location_time = timestamp;\\n ble_data = `${latitude},${longitude},${mac},${address}`;\\n general += 'BLE location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //General Data , status_data\\n case '24':\\n //var general = 'true'\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n }\\n //else {\\n // messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};`);\\n //}\\n // reset variables\\n //alarm = alarmCode = general = status_data = gps_data = wifi_data = lbs_data = beacon_data = ble_data = '';\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n location_time = timestamp;\\n event_time = timestamp;\\n // HardCode to fix possible issue in protocol\\n //event_time = moment.utc().unix();\\n // end of hard code\\n var statusHex = changeEndianness(value.substring(8, 16));\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n //params.BatteryStatus.BatteryStatus = '1';\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n // var alarm = 'BATCN';\\n //configs.BatteryStatus.BatteryStatus = '1';\\n /* if (configs.BatteryStatus.BatteryStatus !== '1') {\\n hasConfigs = true;\\n var batteryStatus = '1';\\n var alarm = 'BATCN';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n //var alarm = 'BATF';\\n // configs.BatteryStatus.BatteryStatus = '3';\\n /* if (configs.BatteryStatus.BatteryStatus !== '3') {\\n hasConfigs = true;\\n var batteryStatus = '3';\\n var alarm = 'BATF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }*/\\n }\\n /* if (!((statusInt & 32) == 32) & !((statusInt & 16) == 16)) {\\n statusDevice += 'Not Charging,';\\n var alarm = 'BATCF';\\n //configs.BatteryStatus.BatteryStatus = '2';\\n if (configs.BatteryStatus.BatteryStatus !== '2') {\\n var batteryStatus = '2';\\n var alarm = 'BATCF';\\n let configsToUpdate = [];\\n configsToUpdate.push({\\n 'code': configIds.BatteryStatus.BatteryStatus,\\n 'value': batteryStatus\\n });\\n }\\n }*/\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) { //isHome\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n if ((statusInt & 16384) == 16384) {\\n statusDevice += 'HomeWiFi,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n status_data = statusDevice; //to oysta template\\n //statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n general += 'statusDevice:' + statusDevice + ',';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ',';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ',';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ',';\\n }\\n //messageForReceiver = (`CareWatch-CYC;${imei};${i};${event_time};${battery_percentage}`);\\n break;\\n //Call Records\\n case '25':\\n //Needed?\\n break;\\n //BLE Location 2\\n case '26':\\n //I don't understand\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Smart Location\\n case '27':\\n location_type = 'SMART';\\n var latitudeHex = value.substring(0, 8);\\n var longitudeHex = value.substring(8, 16);\\n var location_accuracyHex = value.substring(16, 20);\\n var altitudeHex = value.substring(20, 24);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n var altitude = hexToDecimal(changeEndianness(altitudeHex));\\n //location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex)) * 5;\\n //04/08/2022 se quita el multiplicador por 5 pq ya viene el valor en metros\\n location_accuracy = hexToDecimal(changeEndianness(location_accuracyHex));\\n //location_time = timestamp;\\n smart_data = `${latitude},${longitude},${location_accuracy},${altitude}`;\\n general += 'smart location (lat):' + latitude + ', (long):' + longitude + ',';\\n break;\\n //Beacon Location Added 11/10/22\\n case '28':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n descr = hexToAscii(value.substring(34, value.length));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n // var latitudeHex = value.substring(18, 26);\\n // var longitudeHex = value.substring(26, 34);\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (listIndex):' + beacId + ',';\\n break;\\n // Beacon V2\\n case '2C':\\n location_type = 'BEACON';\\n // var alarm = 'EBZI';\\n var latitudeHex = '00';\\n var longitudeHex = '00';\\n var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 1));\\n var beacId = hexToDecimal(value.substring(1, 2));\\n // msg includes descrip\\n if ((flag & 4) == 4) {\\n let desc_leng = hexToDecimal(value.substring(20, 22));\\n descr = hexToAscii(value.substring(22, 22 + (2 * desc_leng)));\\n //descr = hexToAscii(value.substring(18, value.length));\\n }\\n // msg includes lat/lon\\n if ((flag & 8) == 8) {\\n latitudeHex = value.substring(18, 26);\\n longitudeHex = value.substring(26, 34);\\n }\\n // msg includes lat/lon and description\\n if ((flag & 12) == 12) {\\n latitudeHex = value.substring(20, 28);\\n longitudeHex = value.substring(28, 36);\\n let desc_leng = hexToDecimal(value.substring(36, 38));\\n descr = hexToAscii(value.substring(38, 38 + (2 * desc_leng)));\\n }\\n var mac = changeEndianness(value.substring(2, 14)); // comprobar si hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var rssiHex = value.substring(14, 16);\\n var rssi1Hex = value.substring(16, 18);\\n rssi = hexToDecimalSigned(changeEndianness(rssiHex));\\n rssi1 = hexToDecimalSigned(changeEndianness(rssi1Hex));\\n var battery_beacon = hexToDecimal(value.substring(18, 20));\\n latitude = hexToDecimalSigned(changeEndianness(latitudeHex)) / 10000000;\\n longitude = hexToDecimalSigned(changeEndianness(longitudeHex)) / 10000000;\\n //location_time = timestamp;\\n beacon_data = `${latitude},${longitude},${mac},${descr}`;\\n general += 'BEACON location (lat):' + latitude + ', (long):' + longitude + ', (mac):' + mac + ', (description):' + descr + ', (rssi):' + rssi + ', (battery):' + battery_beacon + ', (listIndex):' + beacId + ',';\\n break;\\n //Cell Towers Note\\n case '29':\\n location_type = 'LBS';\\n lbs_data = '';\\n var mccHex = changeEndianness(value.substring(0, 4));\\n var mncHex = value.substring(4, 6);\\n var mcc = hexToDecimal(mccHex);\\n lbs_data += mcc + ',';\\n var mnc = hexToDecimal(mncHex);\\n lbs_data += mnc + ',';\\n var indexLbs = 6;\\n var numTowers = (hexToDecimal(keyLengthHex) - 4) / 7;\\n for (let i = 0; i < numTowers; i++) {\\n var rxlHex = changeEndianness(value.substring(indexLbs, indexLbs + 2));\\n var rxl = hexToDecimal(rxlHex);\\n var lacHex = changeEndianness(value.substring(indexLbs + 2, indexLbs + 6));\\n var lac = hexToDecimal(lacHex);\\n var cellTowers = hexToDecimal(changeEndianness(value.substring(indexLbs + 6, indexLbs + 14)));\\n lbs_data += rxl + ',' + lac + ',' + cellTowers + ',';\\n indexLbs += 14;\\n }\\n lbs_data = lbs_data.slice(0, -1);\\n general += lbs_data;\\n break;\\n case '30':\\n //G-sensor. \\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numStep = (keyLength - 2) / 16;\\n for (let j = 0; j < numStep; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var stepHex = value.substring(8, 16);\\n stepHex = changeEndianness(stepHex);\\n var stepRate = hexToDecimal(stepHex);\\n info = stepRate;\\n //var alarmCode = 'True';\\n var alarm = 'STP';\\n general += ' step counting' + j + ':' + stepRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //Activity\\n case '31':\\n //I don't understand\\n break;\\n //BLE MAC list\\n case '32':\\n //I don't understand\\n break;\\n //Beacon List\\n case '33':\\n //I don't understand\\n break;\\n //Heart Rate Data\\n case '40':\\n if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }\\n var numHeartRate = (keyLength - 2) / 12;\\n for (let j = 0; j < numHeartRate; j++) {\\n var timestampHex = value.substring(0, 8);\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n //timestamp = hexToDecimalSigned(timestampHex);\\n var heartRateHex = value.substring(8, 10);\\n var heartRate = hexToDecimal(heartRateHex);\\n var trustLevelHex = value.substring(10, 12);\\n var trustLevel = hexToDecimal(trustLevelHex);\\n info = heartRate;\\n //var alarmCode = 'True';\\n var alarm = 'HRT';\\n general += ' heart rate' + j + ':' + heartRate + ',';\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n break;\\n //BLE Connected . For Flic button\\n case '62':\\n location_type = 'BLE';\\n //var alarm = 'EBZI'; \\n //var latitudeHex = '00';\\n //var longitudeHex = '00';\\n //var descr = 'empty';\\n var flag = hexToDecimal(value.substring(0, 2)); // 0= Disconnected, 1= Connected\\n var mac = value.substring(2, 14); // No hace falta darle la vuelta\\n // add : format in MAC\\n mac = mac.match(/.{1,2}/g).join(':');\\n var batLevel = hexToDecimal(value.substring(14, 16)); // 0-100\\n //location_time = timestamp;\\n ble_data = `${flag},${batLevel},${mac}`;\\n general += 'BLE location (State):' + flag + ', (bat):' + batLevel + ', (mac):' + mac + ',';\\n break;\\n }\\n }\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n /*else if (alarm === 'HRT') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};HRT=${info};TLEVEL=${trustLevel};LABEL=bpm`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (alarm === 'STP') {\\n messageForReceiver = (`CareWatch-${alarm};${imei};STATUS=${status_data};ETIME=${timestamp};GENERAL=${general};${info};STP=${info};LABEL=steps`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`CareWatch-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }*/\\n // rest the alarm value\\n alarm = '';\\n }\\n if (command == '02') {\\n // Delete previous defined homeBeacons to leave the UI blank when all beacons are removed.\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n // Delete previous defined WiFi Networks to leave the UI blank when all Networks are removed.\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n switch (key) {\\n //Module Number\\n case '01':\\n var date = value.substring(6, 8) + value.substring(4, 6) + '-' + value.substring(2, 4) + '-' + value.substring(0, 2);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Firmware version\\n case '02':\\n //no ACK need\\n var fwVersion = 'v' + hexToDecimal(value.substring(6, 8)) + '.' + hexToDecimal(value.substring(4, 6)) + '.' + hexToDecimal(value.substring(2, 4)) + '.' + hexToDecimal(value.substring(0, 2));\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1A':\\n //no ACK need\\n var fwVersion = hexToAscii(value);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n AddValue(codeValues, \\\"fwVersion\\\", fwVersion);\\n messageForReceiver = (`Roam;ACK-FIRM;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadState.CurrentFirmwareVersion, fwVersion);\\n AddValue(configsToUpdate, configIds.OnDevice.LastDateTimeRead, moment().format('YYYY/MM/DD, HH:mm:ss'))\\n configsToAck.push(configIds.ReadState.CurrentFirmwareVersion);\\n configsToAck.push(configIds.OnDevice.LastDateTimeRead);\\n break;\\n //IMEI\\n case '03':\\n var imei = hexToDecimal(value);\\n // harcode to avoid conflicts with Rio protocol\\n //if ((imei != '860470063029395') && (imei != '860470063035947')) {\\n // AddValue(codeValues, \\\"error\\\", \\\"device imei is not in this protocol\\\");\\n // AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n //AddValue(codeValues, \\\"IMEI\\\", imei);\\n // return\\n //}\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //ICCID\\n case '04':\\n var iccid = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //BLE-MAC\\n case '05':\\n var bleMac = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n //Run Time\\n case '07':\\n var runTime = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '10': // Ringer Volume\\n var volume = hexToDecimal(value);\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-VOL;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"Volume\\\", volume);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.Volume, volume);\\n configsToAck.push(configIds.ReadSystemSettings.Volume);\\n break;\\n case '0A': //Performance mode\\n //var workMode = hexToDecimal(value);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n //AddValue(codeValues, \\\"WorkMode\\\", workMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n //configsToAck.push(configIds.ReadPerformance`Settings.Mode);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n //var workMode = hexToDecimal(value);\\n //var workMode = hexToAscii(value.substring(0, value.length));\\n var workMode = 1234; // + value + \\\"end\\\";\\n //var workModeVal = 9;\\n //workMode = 'test10';\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //AddValue(codeValues, \\\"performanceMode\\\", performanceMode);\\n //AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, performanceMode);\\n // configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n break;\\n case '1B':\\n //Decimal o ascii?\\n var gsmModule = hexToDecimal(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '1F':\\n //System Language\\n var systemLanguage = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n //messageBody = messageBody + keyLengthHex + key + value;\\n messageForReceiver = (`Roam;ACK-LANG;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"SystemLanguage\\\", systemLanguage);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.SystemLanguage, systemLanguage);\\n configsToAck.push(configIds.ReadSystemSettings.SystemLanguage);\\n break;\\n case '33': // phone option\\n // [Value]:83 0B 00 00 {\\\"phoneOption\\\":{\\\"flag_value\\\":2947,\\\"s3\\\":1,\\\"s4\\\":0,\\\"s5\\\":1,\\\"s6\\\":0,\\\"callIncoming\\\":0,\\\"rings\\\":3,\\\"s7\\\":0,\\\"toneID\\\":0,\\\"s1\\\":1,\\\"s2\\\":1}}\\n var statusPhone = hexToBin(value.substring(0, 2)); // To find autoanswer setup\\n if (statusPhone.substring(0, 1) == '1') { // 1 Enable\\n var auto = 'true';\\n } else var auto = 'false';\\n statusPhone = hexToBin(value.substring(2, 4)); // To find allow list setup\\n if (statusPhone.substring(7, 8) == '1') { // 1 Enable\\n allow = 'true';\\n } else var allow = 'false';\\n //statusPhone = hexToBin(value.substring(0, 2)) + hexToBin(value.substring(2, 4));\\n //AddValue(configsToUpdate, configIds.ReadSystemSettings.Statusphone, statusPhone);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AllowList, allow);\\n AddValue(configsToUpdate, configIds.ReadSystemSettings.AutoAnswer, auto);\\n //configsToAck.push(configIds.ReadSystemSettings.Statusphone);\\n configsToAck.push(configIds.ReadSystemSettings.AllowList);\\n configsToAck.push(configIds.ReadSystemSettings.AutoAnswer);\\n break;\\n case '30': //ContactList\\n var contactNumber = value.substring(1, 2);\\n var telLength = hexToDecimal(value.substring(2, 4));\\n var tel = '';\\n switch (contactNumber) {\\n // Emergency Number\\n case '0':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"EmergencyNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.EmergencyNumber, tel);\\n configsToAck.push(configIds.ReadAlertSettings.EmergencyNumber);\\n break;\\n // Speed Dial Number\\n case '1':\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n AddValue(codeValues, \\\"SpeedDialNumber\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.SpeedDialNumber, tel);\\n configsToAck.push(configIds.ReadSpeedDialSettings.SpeedDialNumber);\\n break;\\n // Gateway Number\\n case '9': //00447781482635,Esendex UK 0034627177148,Esendex Spain 00447507288240,Esendex UK Acceptance\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.includes('447781482635') || tel.includes('00447781482635')) {\\n tel = 'Esendex UK'\\n } else if (tel.includes('34627177148') || tel.includes('0034627177148')) {\\n tel = 'Esendex Spain'\\n } else if (tel.includes('447507288240') || tel.includes('00447507288240')) {\\n tel = 'Esendex UK Acceptance'\\n } else {\\n tel = 'Default'\\n }\\n AddValue(codeValues, \\\"SMSGateway\\\", tel);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.SMSGateway, tel);\\n configsToAck.push(configIds.ReadCommunicationSettings.SMSGateway);\\n break;\\n default:\\n tel = hexToAscii(value.substring(4, 4 + (2 * telLength)));\\n if (tel.length < 6) {\\n contacts += '';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n //contacts += 'A' + (contactNumber - 1) + ': ' + tel + ', ';\\n contacts += tel + ', ';\\n AddValue(codeValues, \\\"ApprovedContacts\\\", contacts);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.ApprovedContacts, contacts);\\n configsToAck.push(configIds.ReadAdditionalSettings.ApprovedContacts);\\n break;\\n }\\n break;\\n case '40': // APN\\n //no ACK need\\n var apn = hexToAscii(value.substring(0, value.length));\\n imei = serverParams.Imei;\\n break;\\n case '41': // APN Username\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n break;\\n case '42': // APN Password\\n //no ACK need\\n //apn = apn + ',' + hexToAscii(value.substring(0, value.length));\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"apn\\\", apn);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.APN, apn);\\n configsToAck.push(configIds.ReadCommunicationSettings.APN);\\n break;\\n case '43': //Server Details\\n //52.232.85.255,5678 production 52.174.17.77,5678 acceptance\\n var serverDetails = hexToAscii(value.substring(6, value.length)) + ':' + hexToDecimal(value.substring(4, 6) + value.substring(2, 4));\\n if (serverDetails.includes('52.232.85.255:5678')) {\\n serverDetails = 'Production'\\n } else if (serverDetails.includes('52.174.17.77:5678')) {\\n serverDetails = 'Acceptance'\\n } else if (serverDetails.includes('52.174.17.77:5778')) {\\n serverDetails = 'Protocol-Import'\\n } else {\\n serverDetails = 'Default'\\n }\\n AddValue(codeValues, \\\"server\\\", serverDetails);\\n AddValue(configsToUpdate, configIds.ReadCommunicationSettings.Server, serverDetails);\\n configsToAck.push(configIds.ReadCommunicationSettings.Server);\\n break;\\n case '44': //time interval - work mode intervals\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-MODE;${imei};`);\\n var workMode = 0;\\n var cycle = hexToDecimal(value.substring(10, 12) + value.substring(8, 10));\\n var lazyCycle = hexToDecimal(value.substring(18, 20) + value.substring(16, 18));\\n if (cycle == 240 && lazyCycle == 3600) { // 4 mins and 1 hour\\n //workMode = 'High Frequency';\\n workMode = 3;\\n }\\n if (cycle == 600 && lazyCycle == 3600) { // 10 mins and 1 hour\\n //workMode = 'Balanced';\\n workMode = 2;\\n }\\n if (cycle == 28800 && lazyCycle == 43200) { // 6 hour and 12 hours\\n //workMode = 'Power Saving';\\n workMode = 1;\\n }\\n if (cycle == 86400 && lazyCycle == 86400) { // 24 hours and 24 hours\\n //workMode = 'No Reporting';\\n workMode = 0;\\n }\\n AddValue(codeValues, \\\"Mode\\\", workMode);\\n AddValue(configsToUpdate, configIds.ReadPerformanceSettings.Mode, workMode);\\n configsToAck.push(configIds.ReadPerformanceSettings.Mode);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '47': // Custom Id\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-CUSTID;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"customeid\\\", value);\\n AddValue(configsToUpdate, configIds.ReadState.CustomId, value);\\n configsToAck.push(configIds.ReadState.CustomId);\\n break;\\n case '53': // Non motion alert\\n //2B020080\\n var status = hexToBin(value.substring(6, 8));\\n var alertSetting = '';\\n var enableDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enableDisable = '1';\\n } else {\\n alertSetting = 'Disable, '\\n };\\n //if (status.substring(5, 6) == '1') {\\n // alertSetting += 'Dial, '\\n //} else {\\n // alertSetting += 'No Dial, '\\n //};\\n var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-NOMOTION;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"nomotion\\\", alertSetting);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings, enableDisable);\\n AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadNonMovementSettings.EnableDisableNonMovementSettings);\\n configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n case '56': //Fall down sensibility\\n // '00001100'\\n var fallStatus = hexToBin(value.substring(0, 2));\\n var enalbleDisable = '';\\n //if (fallStatus.substring(4, 5) == '1') {\\n if (fallStatus.substring(0, 1) == '1') {\\n var sensibility = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n var sensibility = 'Disable, '\\n };\\n if (fallStatus.substring(5, 6) == '1') {\\n sensibility += 'Dial, '\\n } else {\\n sensibility += 'No Dial, '\\n };\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-FALLALERT;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var sesibityOptionValue = hexToDecimal(value.substring(1, 2));\\n sensibility += sesibityOptionValue;\\n AddValue(codeValues, \\\"sensibility\\\", sensibility);\\n AddValue(configsToUpdate, configIds.ReadAlertSettings.FallSettings, sensibility);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.EnableDisableFallSettings, enalbleDisable);\\n AddValue(configsToUpdate, configIds.ReadFallSettings.Sensitivity, sesibityOptionValue);\\n configsToAck.push(configIds.ReadAlertSettings.FallSettings);\\n configsToAck.push(configIds.ReadFallSettings.EnableDisableFallSettings);\\n configsToAck.push(configIds.ReadFallSettings.Sensitivity);\\n break;\\n case '73': //BeaconList\\n var beaconNumber = hexToDecimal(value.substring(1, 2));\\n var beaconStatus = hexToBin(value.substring(0, 1));\\n beaconStatus = hexToAscii(value.substring(30, value.length));\\n //beaconStatus = changeEndianness(value.substring(30, value.length));\\n //homeBeacon += 'B' + (beaconNumber + 1) + ': ' + beaconStatus + ', ';\\n homeBeacon += beaconStatus + ', ';\\n AddValue(codeValues, \\\"homeBeacon\\\", homeBeacon);\\n messageForReceiver = (`Roam;ACK-GDATA;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(configsToUpdate, configIds.ReadAdditionalSettings.HomeBeacon, homeBeacon);\\n configsToAck.push(configIds.ReadAdditionalSettings.HomeBeacon);\\n break;\\n case '4A': //Wifi Network List\\n var wifiSSIDLenght = hexToDecimal(value.substring(2, 4));\\n var wifiPasswordLenght = hexToDecimal(value.substring(4, 6));\\n var wifiIndex = hexToDecimal(value.substring(1, 2));\\n //var wifiStatus = hexToDecimal(value.substring(0, 1));\\n var wifiStatus = value.substring(0, 1);\\n /*var enalbleDisable = wifiSSID = wifiPassword = homeWifi = '';\\n /var homeWifi = '';\\n if (wifiIndex == '0') { // Only first Wifi of the list\\n if (wifiStatus == '8') {\\n homeWifi += ' Enable, '\\n enalbleDisable = '1';\\n } else {\\n homeWifi += ' Disable, '\\n //enalbleDisable = '0';\\n };*/\\n if ((wifiStatus == '8') || (wifiStatus == 'C')) { // 8 == ON OR C== ON and Connected\\n var wifiSSID = hexToAscii(value.substring(6, 6 + 2 * (wifiSSIDLenght)));\\n var wifiPassword = hexToAscii(value.substring(6 + 2 * (wifiSSIDLenght), 6 + 2 * (wifiSSIDLenght + wifiPasswordLenght)));\\n var imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-WIFI;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //homeWiFi += 'W' + (wifiIndex + 1) + ': ' + wifiSSID + ', ' + wifiPassword + ';';\\n homeWiFi += wifiSSID + ', ' + wifiPassword + ';';\\n AddValue(codeValues, \\\"wifi\\\", homeWiFi);\\n AddValue(configsToUpdate, configIds.ReadWiFiList.WiFiList, homeWiFi);\\n configsToAck.push(configIds.ReadWiFiList.WiFiList);\\n }\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.SSID, wifiSSID);\\n //AddValue(configsToUpdate, configIds.ReadWiFiSettings.Password, wifiPassword);\\n //configsToAck.push(configIds.ReadWiFiSettings.EnableDisableReadWiFiSettings);\\n //configsToAck.push(configIds.ReadWiFiSettings.SSID);\\n //configsToAck.push(configIds.ReadWiFiSettings.Password);\\n break;\\n case '21': // Speed Dial Settings\\n // [Value]:53 84 {\\\"call1Button\\\":{\\\"mode\\\":0,\\\"feedBack\\\":3,\\\"task\\\":2,\\\"time\\\":20,\\\"status\\\":1}}\\n var status = hexToBin(value.substring(2, 4)); //always pass 2 HEXs to this function\\n var alertSetting = '';\\n var enalbleDisable = '';\\n if (status.substring(0, 1) == '1') {\\n alertSetting = 'Enable, '\\n enalbleDisable = '1'\\n } else {\\n alertSetting = 'Disable, '\\n //enableDisable = '0';\\n };\\n //var time = hexToDecimal(value.substring(2, 4) + value.substring(0, 2));\\n //alertSetting += time;\\n imei = serverParams.Imei;\\n messageForReceiver = (`Roam;ACK-SPEED;${imei};`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n AddValue(codeValues, \\\"speed\\\", alertSetting);\\n //AddValue(configsToUpdate, configIds.ReadAlertSettings.NoMotionAlert, value + '-' + alertSetting);\\n AddValue(configsToUpdate, configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings, enalbleDisable);\\n //AddValue(configsToUpdate, configIds.ReadNonMovementSettings.Time, time);\\n //configsToAck.push(configIds.ReadAlertSettings.NoMotionAlert);\\n configsToAck.push(configIds.ReadSpeedDialSettings.EnableDisableReadSpeedDialSettings);\\n //configsToAck.push(configIds.ReadNonMovementSettings.Time);\\n break;\\n }\\n }\\n }\\n if (command == '03') {\\n while (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n var keyLength = 2 * hexToDecimal(keyLengthHex);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n debug('key = ' + key);\\n debug('value = ' + value);\\n switch (key) {\\n case '01': // Device ID\\n var imei = hexToAscii(value);\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n //return;\\n }\\n break;\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /* case '03':\\n //update customID to check if belongs to this type of device\\n customID = value;\\n if (value != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n } else {\\n if (serverParams.Imei === undefined || serverParams.Imei === null) {\\n sendMessageToLocalhostNoWait(\\\"Eview-ASSOCIATE;\\\" + imei + \\\";\\\" + serverParams.Guid + \\\";\\\");\\n }\\n AddValue(codeValues, \\\"customID\\\", value);\\n general += 'customID:' + value + ',';\\n break;\\n }\\n break; */\\n case '10': // Heartbeat\\n var heartbeat = hexToAscii(value);\\n event_time = moment.utc().unix();\\n if (index < total_length + 16) {\\n var keyLengthHex = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLengthHex);\\n key = message.substring(index, index = index + 2);\\n if (key == '24') {\\n // debug('key: ' + key) //comment those out\\n value = message.substring(index, index = index + keyLength - 2);\\n // debug(value)\\n var timestampHex = value.substring(0, 8);\\n // debug('timestampt hex: ' + timestampHex)\\n timestampHex = changeEndianness(timestampHex);\\n timestamp = hexToDecimal(timestampHex);\\n event_time = timestamp;\\n // debug(event_time)\\n var statusHex = changeEndianness(value.substring(8, 16));\\n // debug(statusHex)\\n var statusInt = hexToDecimal(statusHex);\\n var statusDevice = '';\\n if ((statusInt & 1) == 1) {\\n statusDevice += 'GPS,';\\n }\\n if ((statusInt & 2) == 2) {\\n statusDevice += 'WIFISource,';\\n }\\n if ((statusInt & 4) == 4) {\\n statusDevice += 'CellTower,';\\n }\\n if ((statusInt & 8) == 8) {\\n statusDevice += 'BLELocation,';\\n }\\n if ((statusInt & 16) == 16) {\\n statusDevice += 'Charging,';\\n }\\n if ((statusInt & 32) == 32) {\\n statusDevice += 'FUllyCharged,';\\n }\\n if ((statusInt & 64) == 64) {\\n statusDevice += 'Reboot,';\\n }\\n if ((statusInt & 128) == 128) {\\n statusDevice += 'HistoricalData,';\\n }\\n if ((statusInt & 256) == 256) {\\n statusDevice += 'AGPSDataValid,';\\n }\\n if ((statusInt & 512) == 512) {\\n statusDevice += 'Motion,';\\n }\\n if ((statusInt & 1024) == 1024) {\\n statusDevice += 'SmartLocating,';\\n }\\n if ((statusInt & 2048) == 2048) {\\n statusDevice += 'BeaconLocation,';\\n }\\n if ((statusInt & 4096) == 4096) {\\n statusDevice += 'BLEConnected,';\\n }\\n statusDevice = statusDevice.slice(0, -1);\\n // debug('statusHex:' + statusHex)\\n statusHex = (statusHex);\\n statusHex = hexToBin(statusHex);\\n statusHex = ('00000000000000000000000000000000' + statusHex).slice(-32);\\n // debug(statusHex)\\n battery_percentage = parseInt(statusHex.substring(0, 8), 2);\\n // debug(battery_percentage)\\n // debug(battery_percentage)\\n // debug(statusHex.substring(8, 13))\\n cellNetworkSignal = parseInt(statusHex.substring(8, 13), 2);\\n // debug(cellNetworkSignal)\\n workMode = parseInt(statusHex.substring(13, 16), 2);\\n // debug(workMode)\\n general += 'statusDevice:' + statusDevice + ';';\\n if (battery_percentage) {\\n general += 'battery:' + battery_percentage + ';';\\n }\\n if (cellNetworkSignal) {\\n general += 'cellNetworkSignal:' + cellNetworkSignal + ';';\\n }\\n if (workMode) {\\n general += 'workMode:' + workMode + ';';\\n }\\n }\\n }\\n // revisar\\n var gen_location = '0';\\n //CustomID is not provided so far with command type 03.. commented in the mean time\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n //messageForReceiver = (`Eview-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};SL=${systemLanguage};GENERAL=${general}`);\\n messageForReceiver = (`Roam-HTB;${imei};STATUS=${status_data};TIME=${event_time};BATP=${battery_percentage};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n //messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '12': // Device requesting timestamp\\n timestamp = moment.utc().unix();\\n timestampHex = decimalToHex(timestamp);\\n timestampHex = changeEndianness(timestampHex);\\n keyLengthHex = ('00' + decimalToHex(1 + (timestampHex.length) / 2)).slice(-2);\\n // respond to device with the timestamp of the server\\n messageBody = messageBody + keyLengthHex + key + timestampHex;\\n messageForReceiver = `Eview;${imei};${sequenceID};Get timestamp`;\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n break;\\n case '21': //Cell Towers\\n var mccHex = value.substring(0, 2);\\n var mncHex = value.substring(2, 3);\\n var mcc = hexToDecimal(mccHex);\\n var mnc = hexToDecimal(mncHex);\\n var numTowers = (keyLength - 4) / 5;\\n var cellTowers = hexToAscii(value);\\n messageBody = messageBody + keyLengthHex + key + value;\\n break;\\n case '22': // WIFI locations \\n location_type = 'WIFI';\\n var numWifi = Math.round((hexToDecimal(keyLengthHex) - 1) / 7);\\n //location_time = timestamp;\\n var wifiTowers = value;\\n general += 'wifiTowers:';\\n var indexWifi = 0;\\n var bssid_array = [];\\n gen_location = '';\\n for (let i = 0; i < numWifi; i++) {\\n gen_location += wifiTowers.substring(indexWifi + 2, indexWifi + 14) + ',';\\n indexWifi += 14;\\n }\\n gen_location = gen_location.slice(0, -1);\\n general += gen_location;\\n //CustomID is not provided so far with command type 03\\n /*if (customID != '04') {\\n AddValue(codeValues, \\\"error\\\", \\\"customID not belongs to this protocol\\\");\\n //AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n AddValue(codeValues, \\\"customID\\\", value);\\n return\\n }*/\\n if (alarmCode) {\\n messageForReceiver = (`Roam-${alarm};${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};GENERAL=${general};${info}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else if (statusDevice) {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n } else {\\n messageForReceiver = (`Roam-CYC;${imei};STATUS=${status_data};LTIME=${location_time};ETIME=${event_time};BATP=${battery_percentage};LGPS=${gps_data};LWIF=${wifi_data};LLBS=${lbs_data};LBEACON=${beacon_data};BLE=${ble_data};SIGNAL=${cellNetworkSignal};WM=${workMode};GENERAL=${general}`);\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n }\\n alarmCode = '';\\n break;\\n }\\n }\\n }\\n if (command == '04') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7E') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n if (command == '7F') {\\n // while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n imei = serverParams.Imei;\\n AddValue(codeValues, \\\"imei\\\", imei);\\n messageForReceiver = (`Roam-ACK;${imei};${message}`); // ${sequenceID}; add ${sequenceID}; 19-07\\n sendMessageToLocalhostNoWait(messageForReceiver);\\n var value = message.substring(index, index = index + keyLength - 2);\\n AddValue(configsToUpdate, configIds.ConfigureDevice.LastConfigured, moment().format('YYYY/MM/DD, HH:mm:ss'));\\n configsToAck.push(configIds.ConfigureDevice.LastConfigured);\\n //}\\n }\\n if (command == 'FE') {\\n while (index < total_length + 16) {\\n var keyLength = message.substring(index, index = index + 2);\\n keyLength = 2 * hexToDecimal(keyLength);\\n var key = message.substring(index, index = index + 2);\\n var value = message.substring(index, index = index + keyLength - 2);\\n }\\n }\\n // prepare the ACK msg and change config if it is needed\\n lengthAck = messageBody.length / 2;\\n lengthAck = ('0000' + decimalToHex(lengthAck)).slice(-4);\\n lengthAck = lengthAck.toString().substring(2, 4) + lengthAck.toString().substring(0, 2);\\n ////////////checksum CRC 16\\n var checksumAck = byteStringToByteArray(messageBody);\\n checksumAck = crc16byte(checksumAck);\\n checksumAck = decimalToHex(checksumAck);\\n checksumAck = ('0000' + checksumAck).slice(-4);\\n checksumAck = checksumAck.toString().substring(2, 4) + checksumAck.toString().substring(0, 2);\\n prefix = prefix + lengthAck + checksumAck + sequenceID;\\n // To send ACK to the device previous to internal msg with parts\\n if (needsAck == true) {\\n if (messageBody.length <= 2) {\\n ack = 'AB00030008C7' + sequenceID + '7F0100'; // change AB10030008C7 to AB00030008C7\\n } else {\\n ack = prefix + messageBody;\\n }\\n AddValue(codeValues, 'imei', imei);\\n AddValue(codeValues, 'ack', ack);\\n }\\n } else { // checksum was invalid - print out useful debug info and bet quess at imei \\n AddValue(codeValues, \\\"error\\\", \\\"checksum failed for message\\\");\\n AddValue(codeValues, \\\"rawFromBytes\\\", rawFromBytes);\\n i = rawFromBytes.search('3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]');\\n if (i >= 0) {\\n imei = hexToAscii(rawFromBytes.substring(i, i + 30));\\n AddValue(codeValues, \\\"imei\\\", imei);\\n }\\n }\\n }\\n // Auxiliary functions\\n function buildDataToReceiver(codeValues, configsToAck = [], configsToUpdate = [], configsToSend = []) {\\n const dataToReceiver = {\\n values: codeValues\\n };\\n if (configsToAck.length > 0) {\\n dataToReceiver.configsToAck = configsToAck;\\n }\\n if (configsToUpdate.length > 0) {\\n dataToReceiver.configsToUpdate = configsToUpdate;\\n }\\n if (configsToSend.length > 0) {\\n dataToReceiver.configsToSend = configsToSend;\\n }\\n return dataToReceiver;\\n }\\n\\n function AddValue(codeValueArray, p1, p2) { // push code value pair into array\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n codeValueArray.push(cvpair);\\n }\\n // convert functions\\n function asciiToHex(str) { // ascii to hex \\n return [...str].map(char => char.charCodeAt(0).toString(16).padStart(2, '0')).join('');\\n }\\n\\n function byteStringToByteArray(str) { // convierte una cadena hexadecimal en un array de bytes (number[])\\n const bytes = [];\\n for (let i = 0; i < str.length; i += 2) {\\n const byte = parseInt(str.substring(i, i + 2), 16);\\n if (!isNaN(byte) && byte >= 0 && byte <= 255) {\\n bytes.push(byte);\\n }\\n }\\n return bytes;\\n }\\n\\n function decimalToHex(x) {\\n return Number(x).toString(16).toUpperCase();\\n }\\n\\n function hexToBin(hex) { // convierte un valor hexadecimal a su representación binaria, y asegura que tenga al menos 8 bits \\n const bin = parseInt(hex, 16).toString(2);\\n return bin.padStart(hex.length * 4, '0');\\n }\\n\\n function hexToAscii(hex) {\\n if (hex.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hex.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');\\n }\\n\\n function hexToDecimalSigned(hex) { // hex to decimal\\n if (hex.length % 2 !== 0) {\\n hex = '0' + hex;\\n }\\n const num = parseInt(hex, 16);\\n const bits = hex.length * 4;\\n const maxVal = 2 ** bits;\\n return num >= maxVal / 2 ? num - maxVal : num;\\n }\\n\\n function hexToDecimal(hex) {\\n return parseInt(hex, 16);\\n }\\n // CheckSum and debug functions\\n function changeEndianness(hexString) { // changeEndianness\\n if (hexString.length % 2 !== 0) {\\n throw new Error(\\\"Hex string length must be even\\\");\\n }\\n return hexString.match(/.{2}/g) // divide en bytes (2 caracteres)\\n .reverse() // invierte el orden\\n .join('');\\n }\\n\\n function calculateCheckSum(payloadData) { // calcula el CRC16 sobre una cadena hexadecimal y devuelve el valor con el endianness invertido\\n const bytes = byteStringToByteArray(payloadData);\\n const crc = crc16byte(bytes);\\n const hex = crc.toString(16).padStart(4, '0').toUpperCase();\\n return changeEndianness(hex);\\n }\\n\\n function crc16byte(byteArray) { // calcula el CRC-16 sobre un array de bytes usando una tabla precalculada (crcTable)\\n let crc = 0x0000;\\n for (const byte of byteArray) {\\n if (byte < 0 || byte > 255 || !Number.isInteger(byte)) {\\n throw new RangeError(\\\"Invalid byte value in input array\\\");\\n }\\n const index = (byte ^ (crc >> 8)) & 0xFF;\\n crc = crcTable[index] ^ (crc << 8);\\n }\\n return crc & 0xFFFF;\\n }\\n\\n function debug(...args) { // write debug info to console log, if localTesting\\n if (localTesting) {\\n console.debug('[DEBUG]', ...args);\\n }\\n }\\n /*\\n function sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting) {\\n console.log('local testing - sending to protocol-dev server the message ... '); // port 5878\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5878, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5878, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n }*/\\n function sendMessageToLocalhostNoWait(message) {\\n const server = localTesting ? '52.174.17.77' : '127.0.0.1';\\n //const port = localTesting ? '5878' : ''; //Protocol-dev\\n const port = '5678'; //acceptance-dev\\n if (localTesting) {\\n console.debug('[DEBUG] Sending message to test server:', message);\\n }\\n const client = net.createConnection(port, server, () => {\\n client.write(message);\\n client.end();\\n });\\n client.on('error', (err) => {\\n console.error(`[ERROR] Failed to send message to ${server}:${port}:`, err.message);\\n });\\n client.on('end', () => {\\n if (localTesting) {\\n console.debug('[DEBUG] Connection closed');\\n }\\n });\\n }\\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, net, 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":1744388039}]}],"Groups":[{"Id":6206,"Parent":null,"Name":"Setup","Json":"{\"description\":null,\"columns\":3,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6207,"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"Controls","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6208,"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"Configure Device","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6209,"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"On Device","Json":"{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6210,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Additional Settings","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6210,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Additional Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736425387},{"Type":1,"NewValue":"{\"Id\":6210,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Additional Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427637},{"Type":1,"NewValue":"{\"Id\":6210,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Additional Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427688}]},{"Id":6212,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Communication Settings","Json":"{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6213,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Additional Settings","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6213,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Additional Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427737}]},{"Id":6214,"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"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\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6214,\"Parent\":{\"Id\":6253,\"Name\":\"Alert Settings\",\"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\":6214,\"Name\":\"No Activity\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6254,\"Name\":\"Fall Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6256,\"Name\":\"Non Movement Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"No Activity\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340470}]},{"Id":6216,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read State","Json":"{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6217,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Communication Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6219,"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":"Approved Contacts","Json":"{\"description\":\"Approved Contacts\",\"columns\":1,\"order\":2,\"listSize\":7,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6219,\"Parent\":{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6219,\"Name\":\"Approved Contacts\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":7,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6652,\"Name\":\"Speed Dial\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6577,\"Name\":\"Beacon List\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":10,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Approved Contacts\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":7,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340390}]},{"Id":6253,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Alert Settings","Json":"{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6253,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Alert Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427728}]},{"Id":6254,"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Fall Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6256,"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Non Movement Settings","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6259,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"System Settings","Json":"{\"description\":\"System Settings\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6259,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":6,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340526},{"Type":1,"NewValue":"{\"Id\":6259,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"System Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427742}]},{"Id":6268,"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Performance Settings","Json":"{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6268,\"Parent\":{\"Id\":6208,\"Name\":\"Configure Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6268,\"Name\":\"Performance Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6253,\"Name\":\"Alert Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6213,\"Name\":\"Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6217,\"Name\":\"Communication Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6259,\"Name\":\"System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Performance Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427733}]},{"Id":6296,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Performance Settings","Json":"{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736425391},{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":4,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736425516},{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427677},{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427926},{"Type":1,"NewValue":"{\"Id\":6296,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Performance Settings\",\"Json\":\"{\\\"description\\\":null,\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427938}]},{"Id":6297,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Alert Settings","Json":"{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6297,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Alert Settings\",\"Json\":\"{\\\"description\\\":\\\"Read Alert Settings\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736425512},{"Type":1,"NewValue":"{\"Id\":6297,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Alert Settings\",\"Json\":\"{\\\"description\\\":\\\"Read Alert Settings\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427634},{"Type":1,"NewValue":"{\"Id\":6297,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Alert Settings\",\"Json\":\"{\\\"description\\\":\\\"Read Alert Settings\\\",\\\"columns\\\":1,\\\"order\\\":3,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427684},{"Type":1,"NewValue":"{\"Id\":6297,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Alert Settings\",\"Json\":\"{\\\"description\\\":\\\"Read Alert Settings\\\",\\\"columns\\\":1,\\\"order\\\":2,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736427923}]},{"Id":6303,"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Fall Settings","Json":"{\"description\":\"Read Fall Settings\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6303,\"Parent\":{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6303,\"Name\":\"Read Fall Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6305,\"Name\":\"Read Non Movement Settings\",\"Json\":{\"description\":\"Read Non Movement Settings\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Fall Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340245}]},{"Id":6305,"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read Non Movement Settings","Json":"{\"description\":\"Read Non Movement Settings\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6305,\"Parent\":{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6305,\"Name\":\"Read Non Movement Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6303,\"Name\":\"Read Fall Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read Non Movement Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340275}]},{"Id":6334,"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read System Settings","Json":"{\"description\":\"Read System Settings\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6334,\"Parent\":{\"Id\":6209,\"Name\":\"On Device\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6210,\"Name\":\"Read Additional Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6216,\"Name\":\"Read State\",\"Json\":{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6296,\"Name\":\"Read Performance Settings\",\"Json\":{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6297,\"Name\":\"Read Alert Settings\",\"Json\":{\"description\":\"Read Alert Settings\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read System Settings\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":5,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340297}]},{"Id":6577,"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":"Beacon List","Json":"{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":10,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6652,"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":"Speed Dial","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6653,"Parent":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6653,"Name":"Read Speed Dial Settings","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":"Read Speed Dial Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6746,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"d2","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 3, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6747,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"d1","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 3, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6748,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"t1","Json":"{ \"description\": null, \"columns\": 1, \"order\": 2, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6750,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"t3","Json":"{ \"description\": null, \"columns\": 1, \"order\": 2, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 3}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6751,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"t2","Json":"{ \"description\": null, \"columns\": 1, \"order\": 2, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6774,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"DG","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 1, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6775,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"DG","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 1, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6803,"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"WiFi List","Json":"{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6803,\"Parent\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"WiFi List\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":5,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340361},{"Type":1,"NewValue":"{\"Id\":6803,\"Parent\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6859,\"Name\":\"Oysta Office\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":1},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6972,\"Name\":\"Eulalia Home\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":2},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6966,\"Name\":\"MOVISTAR_OYSTA\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":1},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6940,\"Name\":\"Wifi1\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":1},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},{\"Id\":6860,\"Name\":\"Home\",\"Json\":{\"description\":\"WiFi List\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"],\"index\":2},\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]}]},\"Name\":\"WiFi List\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":5,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736530831}]},{"Id":6805,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"A2","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 2, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6806,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"A3","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 2, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 3}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6809,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"B3","Json":"{ \"description\": null, \"columns\": 1, \"order\": 3, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 3}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6814,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"B2","Json":"{ \"description\": null, \"columns\": 1, \"order\": 3, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6815,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"B4","Json":"{ \"description\": null, \"columns\": 1, \"order\": 3, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6820,"Parent":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Read WiFi List","Json":"{\"description\":\"Read WiFi List\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6820,\"Parent\":{\"Id\":6212,\"Name\":\"Read Communication Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[{\"Id\":6820,\"Name\":\"Read WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"Read WiFi List\",\"Json\":\"{\\\"description\\\":\\\"\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"ProtocolActionObjects\":[]}","Timestamp":1736340151}]},{"Id":6847,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"w113","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6848,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"w12","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6859,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Oysta Office","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6860,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Home","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6861,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"home","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 2, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6862,"Parent":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"home","Json":"{ \"description\": \"Approved Contacts\", \"columns\": 1, \"order\": 2, \"listSize\": 7, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6863,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Oysta Office","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6864,"Parent":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Home","Json":"{ \"description\": \"WiFi List\", \"columns\": 1, \"order\": 1, \"listSize\": 5, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 2}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":6865,"Parent":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"home","Json":"{ \"description\": null, \"columns\": 1, \"order\": 3, \"listSize\": 10, \"toTranslate\": [ \"name\", \"description\" ], \"index\": 1}","DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":11192,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Get Current Config","Json":"{\"name\":\"Get Current Config\",\"default\":\"\",\"description\":\"Get Current Config\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Retrieve the current config from the device. Please do this before and after the configuration of the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11197,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Power Off","Json":"{\"name\":\"Power Off\",\"default\":\"\",\"description\":\"Power Off\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Turn the device off remotely\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11326,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Get Language / Performance","Json":"{\"name\":\"Get Language / Performance\",\"default\":\"\",\"description\":\"Get Language / Performance\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Get Language / Performance\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":13}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11271,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Get Alert Settings","Json":"{\"name\":\"Get Alert Settings\",\"default\":\"\",\"description\":\"Get Alert Settings\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Get Alert Settings\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":11}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11198,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Get Firmware Version","Json":"{\"name\":\"Get Firmware Version\",\"default\":\"\",\"description\":\"Get Firmware Version\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Retrieve the current firmware version from the device.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":12}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11199,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Configuration Mode","Json":"{\"name\":\"Configuration Mode\",\"default\":\"false\",\"description\":\"Configuration Mode\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Makes the device connect to the server quicker to enable a faster setup time.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11220,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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 Controls","Json":"{\"name\":\"Enable Disable Controls\",\"default\":\"\",\"description\":null,\"type\":\"enable\",\"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\":0}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11191,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Firmware Upgrade","Json":"{\"name\":\"Firmware Upgrade\",\"default\":\"\",\"description\":\"Firmware Upgrade\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Upgrade the device to the latest firmware (if available)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11193,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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\":\"Real Time Locate\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends a command to find the GPS location of the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11189,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Factory Reset","Json":"{\"name\":\"Factory Reset\",\"default\":\"\",\"description\":\"Factory Reset\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Reset the device the Oysta factory defaults\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":10}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11194,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Find Device","Json":"{\"name\":\"Find Device\",\"default\":\"\",\"description\":\"Find Device\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Click this to send a command to the device that will help the VIP find their device if lost in the home. The device will emit a sound.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11195,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Clear Buffered Messages","Json":"{\"name\":\"Clear Buffered Messages\",\"default\":\"\",\"description\":\"Clear Buffered Messages\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clear all pending messages to the server\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11196,"Group":{"Id":6207,"Name":"Controls","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Reboot","Json":"{\"name\":\"Reboot\",\"default\":\"\",\"description\":\"Reboot\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Power cycle the device remotely.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11222,"Group":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Enable Disable Configure Device","Json":"{\"name\":\"Enable Disable Configure Device\",\"default\":\"\",\"description\":null,\"type\":\"enable\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11201,"Group":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":"Last Configured","Json":"{\"name\":\"Last Configured\",\"default\":\"\",\"description\":\"Last Configured\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11221,"Group":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Enable Disable On Device","Json":"{\"name\":\"Enable Disable On Device\",\"default\":\"\",\"description\":null,\"type\":\"enable\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11200,"Group":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"LastDateTimeRead","Json":"{\"name\":\"LastDateTimeRead\",\"default\":\"\",\"description\":\"Last Update\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11203,"Group":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6653,"Name":"Read Speed Dial Settings","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":"Approved Contacts","Json":"{\"name\":\"Approved Contacts\",\"default\":\"\",\"description\":\"Current Approved Contacts\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11204,"Group":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6653,"Name":"Read Speed Dial Settings","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":"Home Beacon","Json":"{\"name\":\"Home Beacon\",\"default\":\"\",\"description\":\"Current Home Beacon\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11208,"Group":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"APN","Json":"{\"name\":\"APN\",\"default\":\"\",\"description\":\"Current APN\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The Access Point Name stored on the device will be reported and shown here.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11206,"Group":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SMS Gateway","Json":"{\"name\":\"SMS Gateway\",\"default\":\"\",\"description\":\"SMS Gateway\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The SMS gateway that the device is using to send and receive SMSs (Esendex UK/Esendex Spain)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11207,"Group":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Server","Json":"{\"name\":\"Server\",\"default\":\"\",\"description\":\"Current Server\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The server the device is currently reporting to will be shown here: Acceptance/Production\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11209,"Group":{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"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":"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\":false,\"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":[{"Type":1,"NewValue":"{\"Id\":11209,\"Group\":{\"Id\":6214,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"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\\\":false,\\\"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\":[]}","Timestamp":1734525297}],"LanguageId":null,"Tags":[{"Id":2149,"Name":"noActivityInterval","BackendAction":"NoActivityInterval","Value":""}]},{"Id":11210,"Group":{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"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 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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11210,\"Group\":{\"Id\":6214,\"Name\":\"No Activity\",\"Json\":{\"description\":\"No Activity\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"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\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enable or disable no activity alerts\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736339464}],"LanguageId":null,"Tags":[{"Id":2152,"Name":"activateNoActivity","BackendAction":"ActivateNoActivity","Value":""}]},{"Id":11202,"Group":{"Id":6216,"Name":"Read State","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Current Firmware Version","Json":"{\"name\":\"Current Firmware Version\",\"default\":\"\",\"description\":\"Current Firmware Version\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11279,"Group":{"Id":6216,"Name":"Read State","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Custom Id","Json":"{\"name\":\"Custom Id\",\"default\":\"\",\"description\":\"Custom Id\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Custom Id\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11214,"Group":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"SMS Gateway","Json":"{\"name\":\"SMS Gateway\",\"default\":\"\",\"description\":\"Set SMS Gateway\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"value\":\"00447781482635,Esendex UK\",\"label\":\"Esendex UK\"},{\"value\":\"0034627177148,Esendex Spain\",\"label\":\"Esendex Spain\"},{\"value\":\"00447507288240,Esendex UK Acceptance\",\"label\":\"Esendex UK Acceptance\"},{\"label\":\"default\",\"value\":\"default\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11214,\"Group\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":\"SMS Gateway\",\"Json\":\"{\\\"name\\\":\\\"SMS Gateway\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Set SMS Gateway\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select the SMS gateway that the device will use to send and receive SMSs (Esendex UK/Esendex Spain)\\\",\\\"options\\\":[{\\\"value\\\":\\\"00447781482635,Esendex UK\\\",\\\"label\\\":\\\"Esendex UK\\\"},{\\\"value\\\":\\\"0034627177148,Esendex Spain\\\",\\\"label\\\":\\\"Esendex Spain\\\"},{\\\"value\\\":\\\"00447507288240,Esendex UK Acceptance\\\",\\\"label\\\":\\\"Esendex UK Acceptance\\\"},{\\\"value\\\":\\\"default\\\",\\\"label\\\":\\\"default\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449062}],"LanguageId":null,"Tags":[]},{"Id":11216,"Group":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"APN","Json":"{ \"name\": \"APN\", \"default\": \"\", \"description\": \"Set APN\", \"type\": \"apn\", \"suffix\": null, \"prefix\": null, \"min\": null, \"max\": null, \"futureOnly\": false, \"integerOnly\": false, \"isReadOnly\": false, \"isHidden\": false, \"minLength\": null, \"maxLength\": null, \"helpText\": null, \"options\": [ { \"value\": \" iot.cslm2m.com,,\", \"label\": \" CSL (NEW) [test]\" }, { \"value\": \"hs.vodafone.ie,,\", \"label\": \"Vodafone HS [Ireland]\" }, { \"value\": \"movistar.es,MOVISTAR,MOVISTAR\", \"label\": \"Movistar\" }, { \"value\": \"m2m.movistar.es,movistar,movistar\", \"label\": \"Movistar M2M Spain [Spain]\" }, { \"value\": \"inetd.vfes,,\", \"label\": \"Spainiot \" }, { \"value\": \"airtelwap.es,wap@wap,wap\", \"label\": \"Vodafone 4G [Spain]\" }, { \"value\": \"wlapn.com,deimos,deimos\", \"label\": \"DEIMOS [Spain]\" }, { \"value\": \" iot.cslm2m.com,,\", \"label\": \" CSL (NEW) [test]\" }, { \"value\": \"ukiot1,,\", \"label\": \"BT-EE-trial [UK]\" }, { \"value\": \"test,,\", \"label\": \"test []\" }, { \"value\": \"stream.co.uk,streamip,streamip\", \"label\": \"stream \" }, { \"value\": \"m2m.vodafone.es,Vodafone,Vodafone\", \"label\": \"m2m.vodafone.es [Spain]\" }, { \"value\": \"m2m.vodafone.es,vodafone,vodafone\", \"label\": \"m2m Vodafone Spain [Spain]\" }, { \"value\": \"autoselect,,\", \"label\": \"autoselect \" }, { \"value\": \"internet,0,0\", \"label\": \"China Mobile GPRS\" } ], \"toTranslate\": [ \"name\", \"description\", \"helpText\", \"label\" ]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11216,\"Group\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":\"APN\",\"Json\":\"{\\\"name\\\":\\\"APN\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Set APN\\\",\\\"type\\\":\\\"apn\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select the Access Point Name of your provider\\\",\\\"options\\\":[{\\\"value\\\":\\\" iot.cslm2m.com,,\\\",\\\"label\\\":\\\" CSL (NEW) [test]\\\"},{\\\"value\\\":\\\"hs.vodafone.ie,,\\\",\\\"label\\\":\\\"Vodafone HS [Ireland]\\\"},{\\\"value\\\":\\\"movistar.es,MOVISTAR,MOVISTAR\\\",\\\"label\\\":\\\"Movistar\\\"},{\\\"value\\\":\\\"m2m.movistar.es,movistar,movistar\\\",\\\"label\\\":\\\"Movistar M2M Spain [Spain]\\\"},{\\\"value\\\":\\\"inetd.vfes,,\\\",\\\"label\\\":\\\"Spainiot \\\"},{\\\"value\\\":\\\"airtelwap.es,wap@wap,wap\\\",\\\"label\\\":\\\"Vodafone 4G [Spain]\\\"},{\\\"value\\\":\\\"wlapn.com,deimos,deimos\\\",\\\"label\\\":\\\"DEIMOS [Spain]\\\"},{\\\"value\\\":\\\" iot.cslm2m.com,,\\\",\\\"label\\\":\\\" CSL (NEW) [test]\\\"},{\\\"value\\\":\\\"ukiot1,,\\\",\\\"label\\\":\\\"BT-EE-trial [UK]\\\"},{\\\"value\\\":\\\"test,,\\\",\\\"label\\\":\\\"test []\\\"},{\\\"value\\\":\\\"stream.co.uk,streamip,streamip\\\",\\\"label\\\":\\\"stream \\\"},{\\\"value\\\":\\\"m2m.vodafone.es,Vodafone,Vodafone\\\",\\\"label\\\":\\\"m2m.vodafone.es [Spain]\\\"},{\\\"value\\\":\\\"m2m.vodafone.es,vodafone,vodafone\\\",\\\"label\\\":\\\"m2m Vodafone Spain [Spain]\\\"},{\\\"value\\\":\\\"autoselect,,\\\",\\\"label\\\":\\\"autoselect \\\"},{\\\"value\\\":\\\"internet,0,0\\\",\\\"label\\\":\\\"China Mobile GPRS\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448942}],"LanguageId":null,"Tags":[]},{"Id":11213,"Group":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Name":"Server","Json":"{\"name\":\"Server\",\"default\":\"\",\"description\":\"Set Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"value\":\"default\",\"label\":\"default\"},{\"value\":\"52.232.85.255,5678\",\"label\":\"Production\"},{\"value\":\"52.174.17.77,5678\",\"label\":\"Acceptance\"},{\"label\":\"Protocol-Import\",\"value\":\"52.174.17.77,5778\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11213,\"Group\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":\"Server\",\"Json\":\"{\\\"name\\\":\\\"Server\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Set Server\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select the server the device will report: Acceptance/Production\\\",\\\"options\\\":[{\\\"value\\\":\\\"default\\\",\\\"label\\\":\\\"default\\\"},{\\\"value\\\":\\\"52.232.85.255,5678\\\",\\\"label\\\":\\\"Production\\\"},{\\\"value\\\":\\\"52.174.17.77,5678\\\",\\\"label\\\":\\\"Acceptance\\\"},{\\\"value\\\":\\\"52.174.17.77,5778\\\",\\\"label\\\":\\\"Protocol-Import\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449011},{"Type":1,"NewValue":"{\"Id\":11213,\"Group\":{\"Id\":6217,\"Name\":\"Communication Settings\",\"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\":\"Server\",\"Json\":\"{\\\"name\\\":\\\"Server\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Set Server\\\",\\\"type\\\":\\\"select\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select the server the device will report: Acceptance/Production\\\",\\\"options\\\":[{\\\"value\\\":\\\"52.232.85.255,5678\\\",\\\"label\\\":\\\"Production\\\"},{\\\"value\\\":\\\"52.174.17.77,5678\\\",\\\"label\\\":\\\"Acceptance\\\"},{\\\"value\\\":\\\"52.174.17.77,5778\\\",\\\"label\\\":\\\"Protocol-Import\\\"},{\\\"label\\\":\\\"Protocol-dev\\\",\\\"value\\\":\\\"52.174.17.77,5878\\\"},{\\\"label\\\":\\\"Default\\\",\\\"value\\\":\\\"Default\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1742495687}],"LanguageId":null,"Tags":[]},{"Id":11261,"Group":{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Contact","Json":"{\"name\":\"Contact\",\"default\":\"\",\"description\":\"Contact\",\"type\":\"phone\",\"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\":11261,\"Group\":{\"Id\":6219,\"Name\":\"Approved Contacts\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":7,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Contact\",\"Json\":\"{\\\"name\\\":\\\"Contact\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Contact\\\",\\\"type\\\":\\\"phone\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Phone number of the contact\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449634}],"LanguageId":null,"Tags":[]},{"Id":11296,"Group":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Emergency Number","Json":"{\"name\":\"Emergency Number\",\"default\":\"\",\"description\":\"Emergency Number\",\"type\":\"phone\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The number called when the default SOS button is pushed on the device (typically the ARC)\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11241,"Group":{"Id":6254,"Name":"Fall Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"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 Fall Settings","Json":"{\"name\":\"Enable Disable Fall Settings\",\"default\":\"false\",\"description\":\"Toggle Fall alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle feature that raises an alarm when the VIP falls and breaches the specified sensitivity setting\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11242,"Group":{"Id":6254,"Name":"Fall Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"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":"Sensitivity","Json":"{\"name\":\"Sensitivity\",\"default\":\"\",\"description\":\"Sensitivity\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":1,\"max\":9,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"1-9 (9 high sensitivity/low trigger)\",\"options\":[{\"value\":\"3\",\"label\":\"Low\"},{\"value\":\"6\",\"label\":\"Medium\"},{\"value\":\"9\",\"label\":\"High\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11243,"Group":{"Id":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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 Disable Non Movement Settings","Json":"{\"name\":\"Enable Disable Non Movement Settings\",\"default\":\"\",\"description\":\"Toggle Non-movement alert\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggle feature on Rio for raising an alarm when VIP has not moved for a specified time.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11244,"Group":{"Id":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6253,"Name":"Alert Settings","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time in non-movement\",\"type\":\"radioGroup\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":60,\"max\":36000,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The time the VIP has to be still before the non-movement alarm is raised\",\"options\":[{\"label\":\"30 minutes\",\"value\":\"1800\"},{\"label\":\"1 hour\",\"value\":\"3600\"},{\"label\":\"1 hour 30 minutes\",\"value\":\"5400\"},{\"label\":\"2 hours\",\"value\":\"7200\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11315,"Group":{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6268,"Name":"Performance Settings","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The volume of the ring tone, speaker and voice prompt for the device.\",\"options\":[{\"value\":\"0\",\"label\":\"Off\"},{\"value\":\"20\",\"label\":\"Low\"},{\"value\":\"50\",\"label\":\"Medium\"},{\"value\":\"80\",\"label\":\"High\"},{\"value\":\"100\",\"label\":\"Max\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11273,"Group":{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6268,"Name":"Performance Settings","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":"SystemLanguage","Json":"{\"name\":\"SystemLanguage\",\"default\":\"\",\"description\":\"System Language\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"System Language\",\"options\":[{\"value\":\"en-US\",\"label\":\"en-US\"},{\"value\":\"nl-NL\",\"label\":\"nl-NL\"},{\"value\":\"de\",\"label\":\"de\"},{\"value\":\"fr\",\"label\":\"fr\"},{\"value\":\"pt\",\"label\":\"pt\"},{\"value\":\"es\",\"label\":\"es\"},{\"value\":\"it\",\"label\":\"it\"},{\"label\":\"zh-CN\",\"value\":\"zh-CN\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11314,"Group":{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6268,"Name":"Performance Settings","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":"AutoAnswer","Json":"{\"name\":\"AutoAnswer\",\"default\":\"true\",\"description\":\"AutoAnswer\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggles feature that enables a number in the whitelist to call through the device without any interaction required by the VIP\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11313,"Group":{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6268,"Name":"Performance Settings","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":"Allow List","Json":"{\"name\":\"Allow List\",\"default\":\"true\",\"description\":\"Allow List\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Toggles the allow list of members who can call the device\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11264,"Group":{"Id":6268,"Name":"Performance Settings","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"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":"Mode","Json":"{\"name\":\"Mode\",\"default\":\"\",\"description\":\"Mode\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Mode settings\",\"options\":[{\"value\":\"0\",\"label\":\"No reporting\"},{\"value\":\"1\",\"label\":\"Power saving\"},{\"value\":\"2\",\"label\":\"Balanced\"},{\"value\":\"3\",\"label\":\"High frequency\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11270,"Group":{"Id":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":"Mode","Json":"{\"name\":\"Mode\",\"default\":\"\",\"description\":\"Mode\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Different modes for communication\",\"options\":[{\"label\":\"No reporting\",\"value\":\"0\"},{\"label\":\"Power saving\",\"value\":\"1\"},{\"label\":\"Balanced\",\"value\":\"2\"},{\"label\":\"High frequency\",\"value\":\"3\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11280,"Group":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"No Motion Alert","Json":"{\"name\":\"No Motion Alert\",\"default\":\"\",\"description\":\"No Motion Alert\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"No Motion Alert Debugging only\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11278,"Group":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Fall Settings","Json":"{\"name\":\"Fall Settings\",\"default\":\"\",\"description\":\"Fall Settings\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Fall Settings debugging only\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11297,"Group":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Emergency Number","Json":"{\"name\":\"Emergency Number\",\"default\":\"\",\"description\":\"Current Emergency Number\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"This is the number the device will call when the SOS button is pushed\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11285,"Group":{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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 Disable Fall Settings","Json":"{\"name\":\"Enable Disable Fall Settings\",\"default\":\"false\",\"description\":\"Enable Disable Fall Settings\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable Disable Fall Settings\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11286,"Group":{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"Sensitivity","Json":"{\"name\":\"Sensitivity\",\"default\":\"\",\"description\":\"Sensitivity\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"1-9 (9 high sensitivity/low trigger)\",\"options\":[{\"value\":\"3\",\"label\":\"Low\"},{\"label\":\"Medium\",\"value\":\"6\"},{\"label\":\"High\",\"value\":\"9\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11283,"Group":{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","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 Disable Non Movement Settings","Json":"{\"name\":\"Enable Disable Non Movement Settings\",\"default\":\"false\",\"description\":\"Enable Disable Non Movement Settings\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable Disable Non Movement Settings\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11284,"Group":{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","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":"Time","Json":"{\"name\":\"Time\",\"default\":\"\",\"description\":\"Time in non-movement\",\"type\":\"radioGroup\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":60,\"max\":123,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Time in non-movement\",\"options\":[{\"value\":\"1800\",\"label\":\"30 minutes\"},{\"value\":\"3600\",\"label\":\"1 hour\"},{\"value\":\"5400\",\"label\":\"1 hour 30 minutes\"},{\"value\":\"7200\",\"label\":\"2 hours\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11317,"Group":{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"System Language","Json":"{\"name\":\"System Language\",\"default\":\"\",\"description\":\"System Language\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"System Language\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":11319,"Group":{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"Allow List","Json":"{\"name\":\"Allow List\",\"default\":\"\",\"description\":\"Allow List\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11319,\"Group\":{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Allow List\",\"Json\":\"{\\\"name\\\":\\\"Allow List\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Allow List\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Only authorized or all numbers to call in\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448669}],"LanguageId":null,"Tags":[]},{"Id":11324,"Group":{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"Volume","Json":"{\"name\":\"Volume\",\"default\":\"\",\"description\":\"Volume\",\"type\":\"radioGroup\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":1,\"maxLength\":100,\"helpText\":\"Volume\",\"options\":[{\"label\":\"Off\",\"value\":\"0\"},{\"label\":\"Low\",\"value\":\"20\"},{\"label\":\"Medium\",\"value\":\"50\"},{\"label\":\"High\",\"value\":\"80\"},{\"label\":\"Max\",\"value\":\"100\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":3}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11324,\"Group\":{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Volume\",\"Json\":\"{\\\"name\\\":\\\"Volume\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Volume\\\",\\\"type\\\":\\\"radioGroup\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":100,\\\"helpText\\\":\\\"Volume level\\\",\\\"options\\\":[{\\\"value\\\":\\\"0\\\",\\\"label\\\":\\\"Off\\\"},{\\\"value\\\":\\\"20\\\",\\\"label\\\":\\\"Low\\\"},{\\\"value\\\":\\\"50\\\",\\\"label\\\":\\\"Medium\\\"},{\\\"value\\\":\\\"80\\\",\\\"label\\\":\\\"High\\\"},{\\\"value\\\":\\\"100\\\",\\\"label\\\":\\\"Max\\\"}],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\",\\\"label\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448746}],"LanguageId":null,"Tags":[]},{"Id":11328,"Group":{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","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":"Auto Answer","Json":"{\"name\":\"Auto Answer\",\"default\":\"\",\"description\":\"Auto Answer\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Auto Answer\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11328,\"Group\":{\"Id\":6334,\"Name\":\"Read System Settings\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Auto Answer\",\"Json\":\"{\\\"name\\\":\\\"Auto Answer\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Auto Answer\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Auto Answer or Answer call by pressing button\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448712}],"LanguageId":null,"Tags":[]},{"Id":11662,"Group":{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Beacon","Json":"{\"name\":\"Beacon\",\"default\":\"\",\"description\":null,\"type\":\"beacon\",\"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\":11662,\"Group\":{\"Id\":6577,\"Name\":\"Beacon List\",\"Json\":{\"description\":null,\"columns\":1,\"order\":3,\"listSize\":10,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Beacon\",\"Json\":\"{\\\"name\\\":\\\"Beacon\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"beacon\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Select beacon from the list\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449672}],"LanguageId":null,"Tags":[]},{"Id":11664,"Group":{"Id":6652,"Name":"Speed Dial","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Speed Dial","Json":"{\"name\":\"Enable Disable Speed Dial\",\"default\":\"true\",\"description\":null,\"type\":\"enable\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11665,"Group":{"Id":6652,"Name":"Speed Dial","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Speed Dial Number","Json":"{\"name\":\"Speed Dial Number\",\"default\":\"\",\"description\":null,\"type\":\"phone\",\"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\":11665,\"Group\":{\"Id\":6652,\"Name\":\"Speed Dial\",\"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\":\"Speed Dial Number\",\"Json\":\"{\\\"name\\\":\\\"Speed Dial Number\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":null,\\\"type\\\":\\\"phone\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The number called when the Speed Dial button is pushed on the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449551}],"LanguageId":null,"Tags":[]},{"Id":11667,"Group":{"Id":6653,"Name":"Read Speed Dial Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Speed Dial Number","Json":"{\"name\":\"Speed Dial Number\",\"default\":\"\",\"description\":\"Current Speed Dial Number\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11667,\"Group\":{\"Id\":6653,\"Name\":\"Read Speed Dial Settings\",\"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\":\"Speed Dial Number\",\"Json\":\"{\\\"name\\\":\\\"Speed Dial Number\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Speed Dial Number\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The number called when the Speed Dial button is pushed on the device\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448507}],"LanguageId":null,"Tags":[]},{"Id":11666,"Group":{"Id":6653,"Name":"Read Speed Dial Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Read Speed Dial Settings","Json":"{\"name\":\"Enable Disable Read Speed Dial Settings\",\"default\":\"\",\"description\":null,\"type\":\"enable\",\"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":[],"LanguageId":null,"Tags":[]},{"Id":11690,"Group":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"SSID","Json":"{\"name\":\"SSID\",\"default\":\"\",\"description\":\"SSID\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":1,\"maxLength\":32,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11690,\"Group\":{\"Id\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SSID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":32,\\\"helpText\\\":\\\"Add service set identifier (name) of the WiFi network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449397},{"Type":1,"NewValue":"{\"Id\":11690,\"Group\":{\"Id\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"SSID\",\"Json\":\"{\\\"name\\\":\\\"SSID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SSID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":1,\\\"maxLength\\\":32,\\\"helpText\\\":\\\"Add service set identifier (name) of the WiFi network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":0}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736530779}],"LanguageId":null,"Tags":[]},{"Id":11691,"Group":{"Id":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":{"Id":6217,"Name":"Communication Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[]},"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":\"Password\",\"type\":\"password\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":8,\"maxLength\":16,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11691,\"Group\":{\"Id\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"password\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":8,\\\"maxLength\\\":16,\\\"helpText\\\":\\\"Add password of the WiFi network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736449434},{"Type":1,"NewValue":"{\"Id\":11691,\"Group\":{\"Id\":6803,\"Name\":\"WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":5,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":true,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Password\",\"Json\":\"{\\\"name\\\":\\\"Password\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Password\\\",\\\"type\\\":\\\"password\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":8,\\\"maxLength\\\":16,\\\"helpText\\\":\\\"Add password of the WiFi network\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736530782}],"LanguageId":null,"Tags":[]},{"Id":11692,"Group":{"Id":6820,"Name":"Read WiFi List","Json":{"description":"Read WiFi List","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6212,"Name":"Read Communication Settings","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6209,"Name":"On Device","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":6206,"Name":"Setup","Json":{"description":null,"columns":3,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6207,"Name":"Controls","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":6208,"Name":"Configure Device","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6213,"Name":"Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6219,"Name":"Approved Contacts","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6746,"Name":"d2","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6747,"Name":"d1","Json":{"description":"Approved Contacts","columns":1,"order":3,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6774,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6775,"Name":"DG","Json":{"description":"Approved Contacts","columns":1,"order":1,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6805,"Name":"A2","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6806,"Name":"A3","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6861,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6862,"Name":"home","Json":{"description":"Approved Contacts","columns":1,"order":2,"listSize":7,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6577,"Name":"Beacon List","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6748,"Name":"t1","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6750,"Name":"t3","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6751,"Name":"t2","Json":{"description":null,"columns":1,"order":2,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6809,"Name":"B3","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":3},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6814,"Name":"B2","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6815,"Name":"B4","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6865,"Name":"home","Json":{"description":null,"columns":1,"order":3,"listSize":10,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6652,"Name":"Speed Dial","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":6217,"Name":"Communication Settings","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":6803,"Name":"WiFi List","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6847,"Name":"w113","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6848,"Name":"w12","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6859,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6860,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6863,"Name":"Oysta Office","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":1},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6864,"Name":"Home","Json":{"description":"WiFi List","columns":1,"order":1,"listSize":5,"toTranslate":["name","description"],"index":2},"Parent":null,"Device":null,"DeviceRelated":true,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]}]},{"Id":6253,"Name":"Alert Settings","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":6214,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6254,"Name":"Fall Settings","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":6256,"Name":"Non Movement Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6259,"Name":"System Settings","Json":{"description":"System Settings","columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6268,"Name":"Performance Settings","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":[{"Id":6210,"Name":"Read Additional Settings","Json":{"description":null,"columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6653,"Name":"Read Speed Dial Settings","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":6216,"Name":"Read State","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":6296,"Name":"Read Performance Settings","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6297,"Name":"Read Alert Settings","Json":{"description":"Read Alert Settings","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":6303,"Name":"Read Fall Settings","Json":{"description":"Read Fall Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":6305,"Name":"Read Non Movement Settings","Json":{"description":"Read Non Movement Settings","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},{"Id":6334,"Name":"Read System Settings","Json":{"description":"Read System Settings","columns":1,"order":5,"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":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"WiFi List","Json":"{\"name\":\"WiFi List\",\"default\":\"\",\"description\":\"Current WiFi List\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":11692,\"Group\":{\"Id\":6820,\"Name\":\"Read WiFi List\",\"Json\":{\"description\":\"\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"WiFi List\",\"Json\":\"{\\\"name\\\":\\\"WiFi List\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current WiFi List\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"SSID and password configurated in the device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1736448357}],"LanguageId":null,"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"juanmi","Resource":"Command","Name":"getCurrentSettings2","Message":"(Update) (getCurrentSettings2) set parent command","Timestamp":1733390363},{"Version":"0.2","UserName":"juanmi","Resource":"Command","Name":"getCurrentSettings3","Message":"(Update) (getCurrentSettings3) set parent command","Timestamp":1733390414},{"Version":"0.2","UserName":"juanmi","Resource":"Command","Name":"getCurrentSettings4","Message":"(Update) (getCurrentSettings4) set parent command","Timestamp":1733390446},{"Version":"0.2","UserName":"juanmi","Resource":"Command","Name":"getCurrentSettings5","Message":"(Update) (getCurrentSettings5) set parent command","Timestamp":1733390475},{"Version":"0.2","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"set parent command to enable protocol import","Timestamp":1733390564},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"actionRealTimeLocation","Message":"(Update) (actionRealTimeLocation) Changed to Forced by SMS","Timestamp":1733954911},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"actionPowerOff","Message":"(Update) (actionPowerOff) changed to Forced by SMS","Timestamp":1733955031},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"actionFactoryReset","Message":"(Update) (actionFactoryReset) changed to Forced by SMS","Timestamp":1733955479},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"setGateway","Message":"(Update) (setGateway) changed to Forced by SMS","Timestamp":1733955599},{"Version":"0.3","UserName":"juanmi","Resource":"Command","Name":"actionDeviceReboot","Message":"(Update) (actionDeviceReboot) change to Forced by SMS","Timestamp":1734006832},{"Version":"0.3","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Change some commands to Forced by SMS","Timestamp":1734021010},{"Version":"0.4","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Pack again to test if import work","Timestamp":1734266064},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Fix Read Enable Disable Speed Dial Settings","Timestamp":1734423608},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) fix read speed dial","Timestamp":1734424064},{"Version":"0.5","UserName":"juanmi","Resource":"Command","Name":"actionConfigurationMode","Message":"(Update) (actionConfigurationMode) When Config Mode is off, set HB to 240s.","Timestamp":1734458640},{"Version":"0.5","UserName":"juanmi","Resource":"Command","Name":"setPerformanceMode","Message":"(Update) (setPerformanceMode) Check params.Controls.ConfigurationMode on or off to set HB","Timestamp":1734459146},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Get EnableDisableReadSpeedDialSettings (USER STORY 1485836)","Timestamp":1734461682},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Fix Get Status Speed Dial (\nUSER STORY 1485836)","Timestamp":1734462462},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) continue last fix","Timestamp":1734463709},{"Version":"0.5","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Remove prefix Ax in get Approved Numbers List (USER STORY 1485836)","Timestamp":1734463932},{"Version":"0.5","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"small fixes during Smoke Test. ConfigMode back to 240s, Get Speed Dial Status and Approved contacts list.","Timestamp":1734464663},{"Version":"0.6","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) modify case '21': // Speed Dial Settings","Timestamp":1734520814},{"Version":"0.6","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Fix get key=2 case '21': // Speed Dial Settings","Timestamp":1734521810},{"Version":"0.6","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Removed labels in Read Wifi and Beacons.","Timestamp":1734522292},{"Version":"0.6","UserName":"juanmi","Resource":"GroupParam","Name":"No Activity","Message":"(Update) (No Activity) Add noActivityInterval","Timestamp":1734525297},{"Version":"0.6","UserName":"Michael_Admin","Resource":"Command","Name":"actionFactoryReset","Message":"(Update) (actionFactoryReset) \tineedtoresetEV04!","Timestamp":1734595853},{"Version":"0.6","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Small fixes for version 1.0 - SMS reset, get Speed dial settings, etc.","Timestamp":1734605686},{"Version":"0.7","UserName":"juanmi","Resource":"Command","Name":"setGateway","Message":"(Update) (setGateway) Assign gateway_number for SMS","Timestamp":1734622575},{"Version":"0.7","UserName":"juanmi","Resource":"Command","Name":"setGateway","Message":"(Update) (setGateway) doesn't accept SMS+ Untogle Call in SMS msg","Timestamp":1734632777},{"Version":"0.7","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"SetGateWat command : doesn't accept SMS+ Untogle Call in SMS msg","Timestamp":1736339136},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Enable Disable No Activity","Message":"(Update) (Enable Disable No Activity) add tag ActivateNoActivity","Timestamp":1736339464},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read WiFi List","Message":"(Update) (Read WiFi List) delete description","Timestamp":1736340151},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Fall Settings","Message":"(Update) (Read Fall Settings) delete description","Timestamp":1736340245},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Non Movement Settings","Message":"(Update) (Read Non Movement Settings) delete description","Timestamp":1736340275},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read System Settings","Message":"(Update) (Read System Settings) delete description","Timestamp":1736340297},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"WiFi List","Message":"(Update) (WiFi List) delete description","Timestamp":1736340361},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Approved Contacts","Message":"(Update) (Approved Contacts) delete description","Timestamp":1736340390},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"No Activity","Message":"(Update) (No Activity) delete description","Timestamp":1736340470},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"System Settings","Message":"(Update) (System Settings) delete description","Timestamp":1736340526},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Additional Settings","Message":"(Update) (Read Additional Settings) Reorder Groups","Timestamp":1736425387},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) Reorder Groups","Timestamp":1736425391},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Alert Settings","Message":"(Update) (Read Alert Settings) Reorder Groups","Timestamp":1736425512},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) Reorder Groups","Timestamp":1736425516},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Alert Settings","Message":"(Update) (Read Alert Settings) Reorder Groups","Timestamp":1736427634},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Additional Settings","Message":"(Update) (Read Additional Settings) Reorder Groups","Timestamp":1736427637},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) Reorder Groups","Timestamp":1736427677},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Alert Settings","Message":"(Update) (Read Alert Settings) Reorder Groups","Timestamp":1736427684},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Additional Settings","Message":"(Update) (Read Additional Settings) Reorder Groups","Timestamp":1736427688},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Alert Settings","Message":"(Update) (Alert Settings) Reorder Groups","Timestamp":1736427728},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Performance Settings","Message":"(Update) (Performance Settings) Reorder Groups","Timestamp":1736427733},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Additional Settings","Message":"(Update) (Additional Settings) Reorder Groups","Timestamp":1736427737},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"System Settings","Message":"(Update) (System Settings) Reorder Groups","Timestamp":1736427742},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Alert Settings","Message":"(Update) (Read Alert Settings) Reorder Groups","Timestamp":1736427923},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) Reorder Groups","Timestamp":1736427926},{"Version":"0.8","UserName":"juanmi","Resource":"Group","Name":"Read Performance Settings","Message":"(Update) (Read Performance Settings) reorder","Timestamp":1736427938},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"WiFi List","Message":"(Update) (WiFi List) add help text","Timestamp":1736448357},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) add help text","Timestamp":1736448507},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Allow List","Message":"(Update) (Allow List) add help text","Timestamp":1736448669},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Auto Answer","Message":"(Update) (Auto Answer) add help text","Timestamp":1736448712},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Volume","Message":"(Update) (Volume) add help text","Timestamp":1736448746},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"APN","Message":"(Update) (APN) add help text","Timestamp":1736448942},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Server","Message":"(Update) (Server) add help text","Timestamp":1736449011},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"SMS Gateway","Message":"(Update) (SMS Gateway) add help text","Timestamp":1736449062},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) add help text","Timestamp":1736449397},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) add help text","Timestamp":1736449434},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Speed Dial Number","Message":"(Update) (Speed Dial Number) add help text","Timestamp":1736449551},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Contact","Message":"(Update) (Contact) add help text","Timestamp":1736449634},{"Version":"0.8","UserName":"juanmi","Resource":"GroupParam","Name":"Beacon","Message":"(Update) (Beacon) add help text","Timestamp":1736449672},{"Version":"0.8","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"UI improvements: delete descriptions, reorder groups, add help texts","Timestamp":1736449827},{"Version":"0.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"SSID","Message":"(Update) (SSID) Reorder Group Params","Timestamp":1736530779},{"Version":"0.9","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Password","Message":"(Update) (Password) Reorder Group Params","Timestamp":1736530782},{"Version":"0.9","UserName":"Michael_Admin","Resource":"Group","Name":"WiFi List","Message":"(Update) (WiFi List) reorder the wifi ssid and password ","Timestamp":1736530831},{"Version":"0.9","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"reorder wifi and others","Timestamp":1737368019},{"Version":"1.0","UserName":"juanmi","Resource":"GroupParam","Name":"Server","Message":"(Update) (Server) Add Protocol-dev to servers list","Timestamp":1742495687},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Review and update the Read method For Beacons/Wifi/Whitelist - Ticket 1569531","Timestamp":1742549373},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Review and update the Read method For Whitelist","Timestamp":1742550263},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Optimize Auxiliary functions and fix sendDataToReceiver","Timestamp":1742635144},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Fix sendMessageToLocalhostNoWait (local port)","Timestamp":1742645392},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) fix sendMessageToLocalhostNoWait 2","Timestamp":1742648212},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) fix sendMessageToLocalhostNoWait 3","Timestamp":1742648816},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) sendMessageToLocalhostNoWait port to acceptance server","Timestamp":1742649832},{"Version":"1.0","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) typo error","Timestamp":1742649962},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) remove console.log in decoder case '03'","Timestamp":1744112746},{"Version":"1.0","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"DEV BUG 1634606 - remove console.log in decoder case '03'","Timestamp":1744134433},{"Version":"1.1","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Return from function when no Imei in server param to create the long connection. sendMessageToLocalhostNoWait(\"Eview-ASSOCIATE;\" + imei + \";\" + serverParams.Guid + \";\");","Timestamp":1744278584},{"Version":"1.1","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix tickets regarding bugs with long connection","Timestamp":1744282947},{"Version":"1.2","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Comment \"return\" in msg ASSOCIATE in msg types !=03 ","Timestamp":1744367131},{"Version":"1.2","UserName":"juanmi","Resource":"Protocol","Name":null,"Message":"Fix issue with long connection stablishment","Timestamp":1744367491},{"Version":"1.3","UserName":"juanmi","Resource":"Operation","Name":"Access TEC Roam","Message":"(Update) (Access TEC Roam) Change Eview for Roam in HTB","Timestamp":1744388039}],"ProtocolActionObjects":[],"Tags":[{"Id":2136,"Name":"OneCommandSender","BackendAction":"OneCommandSender","Value":"true"}],"MessageCodes":[{"Name":"Alarm - Movement","Description":"At alert on movement ( not fall)","Code":"ALMOV","CanLiveInsights":false},{"Name":"Alarm-Welfare Check","Description":"Welfare check alarm","Code":"ALW","CanLiveInsights":false},{"Name":"Cycle","Description":"Regular, cyclic, events from a device","Code":"CYC","CanLiveInsights":false},{"Name":"Location - other","Description":"Location - other","Code":"LOCN","CanLiveInsights":false},{"Name":"Acknowledge","Description":"Acknowledgment of a command sent to the device","Code":"ACK","CanLiveInsights":false},{"Name":"Battery Charging - On","Description":"Battery Charging - On","Code":"BATCN","CanLiveInsights":false},{"Name":"Check / keep alive / Heartbeat","Description":"Keep alive / heartbeat signal to maintain a connection ","Code":"CHK","CanLiveInsights":false},{"Name":"Alarm - Amber Alert","Description":"Alarm - Amber Alert","Code":"ALA","CanLiveInsights":false},{"Name":"Alarm – Fall","Description":"Alarm – Fall","Code":"ALF","CanLiveInsights":false},{"Name":"Alarm – Non movement","Description":"Alarm – Non movement","Code":"ALNM","CanLiveInsights":false},{"Name":"Alarm - Smoke","Description":"Alarm - Smoke","Code":"ALSM","CanLiveInsights":false},{"Name":"Alarm - Speed","Description":"Alarm - Speed","Code":"ALSP","CanLiveInsights":false},{"Name":"Alarm – Emergency Cancelled","Description":"Alarm – Emergency Cancelled by the user","Code":"ALSOS-C","CanLiveInsights":false},{"Name":"Battery Charging - off","Description":"Battery Charging - off","Code":"BATCF","CanLiveInsights":false},{"Name":"Battery empty","Description":"Battery empty","Code":"BATE","CanLiveInsights":false},{"Name":"Battery full","Description":"Battery full","Code":"BATF","CanLiveInsights":false},{"Name":"Battery low","Description":"Battery low","Code":"BATL","CanLiveInsights":false},{"Name":"Button Press","Description":"Button Press","Code":"BPRS","CanLiveInsights":false},{"Name":"Ebeacon zone in","Description":"Ebeacon zone in","Code":"EBZI","CanLiveInsights":false},{"Name":"Ebeacon zone out","Description":"Ebeacon zone out","Code":"EBZO","CanLiveInsights":false},{"Name":"Location check in","Description":"Location check in","Code":"LCI","CanLiveInsights":false},{"Name":"Location check out","Description":"Location check out","Code":"LCO","CanLiveInsights":false},{"Name":"Reminder not ok","Description":"Reminder not ok","Code":"MRME","CanLiveInsights":false},{"Name":"No Activity","Description":"No Activity","Code":"NACT","CanLiveInsights":false},{"Name":"Power Off","Description":"Power Off","Code":"PWRF","CanLiveInsights":false},{"Name":"Power On","Description":"Power On","Code":"PWRN","CanLiveInsights":false},{"Name":"Vehicle - Driving hours excess","Description":"Vehicle - Driving hours excess","Code":"VDE","CanLiveInsights":false},{"Name":"Vehicle – Fuel cap","Description":"Vehicle – Fuel cap","Code":"VFC","CanLiveInsights":false},{"Name":"Vehicle - Fuel level","Description":"Vehicle - Fuel level","Code":"VFL","CanLiveInsights":false},{"Name":"Vehicle – Harsh braking","Description":"Vehicle – Harsh braking","Code":"VHB","CanLiveInsights":false},{"Name":"Vehicle – Ignition off","Description":"Vehicle – Ignition off","Code":"VIGF","CanLiveInsights":false},{"Name":"Vehicle – Driver not authorized","Description":"Vehicle – Driver not authorized","Code":"VNA","CanLiveInsights":false},{"Name":"Vehicle – Night driving","Description":"Vehicle – Night driving","Code":"VND","CanLiveInsights":false},{"Name":"Vehicle – Ignition on","Description":"Vehicle – Ignition on","Code":"VIGN","CanLiveInsights":false},{"Name":"Vehicle – Seat belt","Description":"Vehicle – Seat belt","Code":"VSB","CanLiveInsights":false},{"Name":"Zone in","Description":"Zone in","Code":"ZNI","CanLiveInsights":false},{"Name":"Zone out","Description":"Zone out","Code":"ZNO","CanLiveInsights":false},{"Name":"Device Status","Description":"Device Status","Code":"STATUS","CanLiveInsights":false},{"Name":"Real time location ","Description":"Real time location ","Code":"RTL","CanLiveInsights":false},{"Name":"Encoded communication","Description":"Encoded communication","Code":"ENC","CanLiveInsights":false},{"Name":"Proximity","Description":"Proximity alert ","Code":"PROX","CanLiveInsights":false},{"Name":"Dummy - do NOT use ","Description":"Dummy template - should not be used","Code":"DUMMY","CanLiveInsights":false},{"Name":"Battery High","Description":"Battery High","Code":"BATH","CanLiveInsights":false},{"Name":"Location - Set Available","Description":"Location - Set Available","Code":"LSA","CanLiveInsights":false},{"Name":"Location - Set Busy","Description":"Location - Set Busy","Code":"LSB","CanLiveInsights":false},{"Name":"Device information","Description":"General Device Information from the device","Code":"INFO","CanLiveInsights":false},{"Name":"Alarm - Tamper","Description":"Alarm - Device Tamper","Code":"ALTAM","CanLiveInsights":false},{"Name":"Communication ","Description":"General communication, initialisation etc.","Code":"COMM","CanLiveInsights":false},{"Name":"Humidity","Description":"Relative humidity","Code":"RH","CanLiveInsights":false},{"Name":"Temperature","Description":"Temperature","Code":"TEMP","CanLiveInsights":false},{"Name":"Alarm - Temperature","Description":"Alarm - Temperature","Code":"ALTEMP","CanLiveInsights":false},{"Name":"Alarm - Humidity","Description":"Alarm - Relative Humidity","Code":"ALRH","CanLiveInsights":false},{"Name":"Proximity End","Description":"Proximity End","Code":"PROX-E","CanLiveInsights":false},{"Name":"Alarm - PIR","Description":"Alarm - PIR","Code":"ALPIR","CanLiveInsights":false},{"Name":"PIR - Movements","Description":"Number of PIR movements detected in reporting period","Code":"PIRM","CanLiveInsights":false},{"Name":"Battery Report","Description":"Battery Voltage Report","Code":"BATR","CanLiveInsights":false},{"Name":"Alarm - Sim Swap","Description":"Alarm - Sim Swap","Code":"ALSS","CanLiveInsights":false},{"Name":"Mileage","Description":"Mileage","Code":"MIL","CanLiveInsights":false},{"Name":"Intrusion","Description":"Intrusion","Code":"INT","CanLiveInsights":false},{"Name":"No Fix Report","Description":"No fix report","Code":"NFR","CanLiveInsights":false},{"Name":"Switched Off Report","Description":"Switched off report","Code":"SOR","CanLiveInsights":false},{"Name":"End - Shift","Description":"End - Shift","Code":"ENDSH","CanLiveInsights":false},{"Name":"Sleep Mode","Description":"Device comes to sleep mode","Code":"SPM","CanLiveInsights":false},{"Name":"Wake Up Device","Description":"Device Wake Up from SleepMode","Code":"WUD","CanLiveInsights":false},{"Name":"Door Closed","Description":"Door Closed","Code":"DRCL","CanLiveInsights":false},{"Name":"Door Open","Description":"Door Open","Code":"DRO","CanLiveInsights":false},{"Name":"Alarm Door Closed","Description":"Alarm Door Closed","Code":"ALDC","CanLiveInsights":false},{"Name":"Alarm Door Open","Description":"Alarm Door Open","Code":"ALDO","CanLiveInsights":false},{"Name":"Alarm - Amber Alert - Snooze","Description":"Amber Alert Alarm - snoozed by user","Code":"ALA-S","CanLiveInsights":false},{"Name":"Amber Alert - On","Description":"Amber Alert Alarm created by User","Code":"ALA-O","CanLiveInsights":false},{"Name":"Reminder OK","Description":"Reminder OK","Code":"MRMK","CanLiveInsights":false},{"Name":"Message - text","Description":"Message- text","Code":"MSG","CanLiveInsights":false},{"Name":"Start - Shift","Description":"Start- Shift","Code":"STSH","CanLiveInsights":false},{"Name":"Beacon","Description":"Beacon","Code":"BT","CanLiveInsights":false},{"Name":"Alarm - Amber Alert - Cancel","Description":"Amber alert alarm, cancelled by user","Code":"ALA-C","CanLiveInsights":false},{"Name":"Alarm-Impact","Description":"Alarm-Impact","Code":"ALI","CanLiveInsights":false},{"Name":"Reminder Snooze ","Description":"Reminder - snooze","Code":"MRM-S","CanLiveInsights":false},{"Name":"Blood Pressure","Description":"Blood Pressure","Code":"HBP","CanLiveInsights":false},{"Name":"Heart Rate","Description":"Heart Rate","Code":"HRT","CanLiveInsights":false},{"Name":"SELFTEST","Description":"Used for Testing Purposes","Code":"TEST","CanLiveInsights":false},{"Name":"Alarm - Fall Cancelled","Description":"Alarm - Fall Cancelled","Code":"ALF-C","CanLiveInsights":false},{"Name":"Alarm – Non Movement Cancelled","Description":"Alarm – Non movement Cancelled by the user","Code":"ALNM-C","CanLiveInsights":false},{"Name":"Insight","Description":"Insight","Code":"INSIGHT","CanLiveInsights":false},{"Name":"Quantity Drunk","Description":"Quantity of liquid drunk ","Code":"QDRNK","CanLiveInsights":false},{"Name":"Bed - in","Description":"Bed or seat sensor ","Code":"BEDIN","CanLiveInsights":false},{"Name":"Bed - Out","Description":"Bed / seat sensor","Code":"BEDOUT","CanLiveInsights":false},{"Name":"Leak sensor","Description":"Leak detected ","Code":"LEAK","CanLiveInsights":false},{"Name":"Light - Lux","Description":"Light levels - LUX ","Code":"LUX","CanLiveInsights":false},{"Name":"Exited","Description":"Exited","Code":"EXIT","CanLiveInsights":false},{"Name":"Entered","Description":"Entered","Code":"ENTER","CanLiveInsights":false},{"Name":"Answered Door","Description":"Answered Door","Code":"ANSWDR","CanLiveInsights":false},{"Name":"Alarm – Emergency","Description":"Alarm – Emergency","Code":"ALSOS","CanLiveInsights":true},{"Name":"Alarm – Gas","Description":"Alarm – Gas ( carbon monixide, carbon dioxide, propane, butane ) ","Code":"ALG","CanLiveInsights":false},{"Name":"Leak Off","Description":"Leak detection has stopped alerting","Code":"LEAK-OFF","CanLiveInsights":false},{"Name":"Question-Answer","Description":"Question - Answer response","Code":"Q-A","CanLiveInsights":false},{"Name":"Visitor Arrived","Description":"Visitor Arrived","Code":"VISARR","CanLiveInsights":true},{"Name":"Visitor Departed","Description":"Visitor Departed","Code":"VISDEP","CanLiveInsights":true},{"Name":"Docked","Description":"Device placed in docking station","Code":"DOCK-IN","CanLiveInsights":false},{"Name":"Undocked","Description":"Device removed from docking station","Code":"DOCK-OUT","CanLiveInsights":false},{"Name":"Gas concentrarion","Description":"Gas concentrarion (ppm)","Code":"GAS","CanLiveInsights":false},{"Name":"Distance ","Description":"Distance measurement, could be level, proximity etc ","Code":"DIST","CanLiveInsights":false},{"Name":"Alarm Distance","Description":"Alarm on distance measurement, could be level, proximity etc ","Code":"ALDIST","CanLiveInsights":false},{"Name":"Welfare OK","Description":"Welfare check has returned OK","Code":"WELFOK","CanLiveInsights":false},{"Name":"Steps","Description":"Step counter","Code":"STEPS","CanLiveInsights":true},{"Name":"Connection","Description":"Connection","Code":"CON","CanLiveInsights":false},{"Name":"Disconnection","Description":"Disconnect","Code":"DISCON","CanLiveInsights":false},{"Name":"Position By Button","Description":"Position By Button","Code":"PBB","CanLiveInsights":false},{"Name":"Alarm Welfare","Description":"Alert welfare not confirmed","Code":"ALA-W","CanLiveInsights":false},{"Name":"Welfare Timer Starts","Description":"Welfare Check in","Code":"WTS","CanLiveInsights":false},{"Name":"Welfare Stops","Description":"Welfare Check out","Code":"WSTP","CanLiveInsights":false},{"Name":"Alarm Ended","Description":"Alarm finished","Code":"ALA-F","CanLiveInsights":false},{"Name":"BRTH - Breath Rate","Description":"Rate of Breathing per minute","Code":"BRTH","CanLiveInsights":false},{"Name":"Sleep State","Description":"Sleep state ","Code":"SLPSTATE","CanLiveInsights":false},{"Name":"Alarm - Tilt","Description":"Alarm - Tilt Alert","Code":"ALTLT","CanLiveInsights":false},{"Name":"Alert – Fall Suspected","Description":"Alert – Fall Suspected","Code":"ALFS","CanLiveInsights":false}]} \ No newline at end of file